|-- InputStream(讀)數組
|-- OutputStream(寫)jvm
因爲字節是二進制數據,因此字節流能夠操做任何類型的數據,值得注意的是字符流使用的是字符數組char[]而字節流使用的是字節數組byte[]。下面來看一個字節流讀寫文件的簡單例子。spa
清單7,使用字節流讀寫文本文件代碼 xml
private static void test5(){ 對象
FileOutputStream fos=null; 圖片
try{ 內存
fos=new FileOutputStream("D:/test.txt"); it
fos.write(0010);//寫入二進制數據 io
fos.flush(); test
}catch(IOException e){
}finally{
try{
fos.close();
}catch(IOException ex){
}
}
FileInputStream fis=null;
try{
fis=new FileInputStream("D:/test.txt");
//fis.available()是獲取關聯文件的字節數,即test.txt的字節數
//這樣建立的數組大小就和文件大小恰好相等
//這樣作的缺點就是文件過大時,可能超出jvm的內存空間,從而形成內存溢出
byte[] buf=new byte[fis.available()];
fis.read(buf);
System.out.println(new String(buf));
}catch(IOException e){
}finally{
try{
fos.close();
}catch(IOException ex){
}
}
}
清單8,使用緩衝區對一張圖片進行復制代碼
private static void test6(){
BufferedOutputStream bos=null;
BufferedInputStream bis=null;
try{
//前面已經說過了,緩衝對象是根據具體的流對象建立的,因此必需要有流對象
bis=new BufferedInputStream(new FileInputStream("E:\\images\\wo\\1.jpg"));
//寫入目標地址
bos=new BufferedOutputStream(new FileOutputStream("E:\\test.jpg"));
byte[] buf=new byte[1024];
while((bis.read(buf))!=-1){
bos.write(buf);
}
bos.flush();
}catch(IOException e){
e.toString();
}finally{
try{
if(bos!=null){
bos.close();
}
if(bis!=null){
bis.close();
}
}catch(IOException ex){
ex.toString();
}
}
}