FileInputStream 和 FileReader(頭ho暈
的)
FileReader 會做編碼轉換,FileInputStream會忠實于原始文件數據。任何形式的Reader都會涉及編碼。
BufferedInputStream和BufferedOutputStream
BufferedInputStream:
添加了功能,即緩沖輸入和支持 mark 和 reset 方法的能力。創建 BufferedInputStream
時即創建了一個內部緩沖區數組。讀取或跳過流中的各字節時,必要時可根據所包含的輸入流再次填充該內部緩沖區,一次填充多個字節。mark
操作記錄輸入流中的某個點,reset 操作導致在從所包含的輸入流中獲取新的字節前,再次讀取自最后一次 mark 操作以來所讀取的所有字節。
BufferedOutputStream:該類實現緩沖的輸出流。通過設置這種輸出流,應用程序就可以將各個字節寫入基礎輸出流中,而不必為每次字節寫入調用基礎系統。
BufferedReader和FileReader
BufferedReader :由Reader類擴展而來,提供通用的緩沖方式文本讀取,而且提供了很實用的readLine,讀取分行文本很適合,BufferedReader是針對Reader的,不直接針對文件,也不是只針對文件讀取。
FileReader
是由java.io.InputStreamReade擴展來的,是針對文件讀取的。實際使用時往往用 BufferedReader
bufferedreader = new BufferedReader(new
FileReader("test.conf"));先建立一個文件reader,再用BufferedReader讀。
FileInputStream和Reader
FileInputStream:
擴展自java.io.InputStream,InputStream提供的是字節流的讀取,而非文本讀取,這是和Reader類的根本區別。用
Reader讀取出來的是char數組或者String ,使用InputStream讀取出來的是byte數組。
Reader:Reader
類及其子類提供的字符流的讀取char(16位),InputStream及其子類提供字節流的讀取byte(8位),所以FileReader類是將文
件按字符流的方式讀取,FileInputStream則按字節流的方式讀取文件,BufferedReader的作用是提供緩沖,
InputStreamReader可以將讀如stream轉換成字符流方式(即reader)是reader和stream之間的橋梁
BufferedInputStream和BufferedOutputStream的一個例子
import java.io.*;
public class BufferedStreamDemo...{
public static void main(String[] args)...{
try...{
byte[] data=new byte[1];
File srcFile=new File("BufferedStreamDemo.java");
File desFile=new File("BufferedStreamDemo.txt");
BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(srcFile));
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(desFile));
System.out.println("復制文件: "+srcFile.length()+"字節");
while(bufferedInputStream.read(data)!=-1)...{
bufferedOutputStream.write(data);
}
//將緩沖區中的數據全部寫出
bufferedOutputStream.flush();
System.out.println("復制完成");
//顯示輸出BufferedStreamDemo.txt文件的內容
bufferedInputStream =new BufferedInputStream(new FileInputStream(new File("BufferedStreamDemo.txt")));
while(bufferedInputStream.read(data)!=-1)...{
String str=new String(data);
System.out.print(str);
}
bufferedInputStream.close();
bufferedOutputStream.close();
}catch(ArrayIndexOutOfBoundsException e)...{
System.out.println("using: java useFileStream src des");
e.printStackTrace();
}catch(IOException e)...{
e.printStackTrace();
}
}
}