Java IO: Buffered和Data
作者:Jakob Jenkov 譯者: 李璟([email protected])
本小節會簡要概括Java IO中Buffered和data的輸入輸出流,主要涉及以下4個型別的流:BufferedInputStream,BufferedOutputStream,DataInputStream,DataOutputStream。
BufferedInputStream
BufferedInputStream能為輸入流提供緩衝區,能提高很多IO的速度。你可以一次讀取一大塊的資料,而不需要每次從網路或者磁碟中一次讀取一個位元組。特別是在訪問大量磁碟資料時,緩衝通常會讓IO快上許多。
為了給你的輸入流加上緩衝,你需要把輸入流包裝到BufferedInputStream中,程式碼如下:
InputStream input = new BufferedInputStream(new FileInputStream("c:\\data\\input-file.txt"));
很簡單,不是嗎?你可以給BufferedInputStream的建構函式傳遞一個值,設定內部使用的緩衝區設定大小(譯者注:預設緩衝區大小8 * 1024B),就像這樣:
InputStream input = new BufferedInputStream(new FileInputStream("c:\\data\\input-file.txt"), 8 * 1024);
這個例子設定了8KB的緩衝區。最好把緩衝區大小設定成1024位元組的整數倍,這樣能更高效地利用內建緩衝區的磁碟。
除了能夠為輸入流提供緩衝區以外,其餘方面BufferedInputStream基本與InputStream類似。
BufferedOutputStream
與BufferedInputStream類似,BufferedOutputStream可以為輸出流提供緩衝區。可以構造一個使用預設大小緩衝區的BufferedOutputStream(譯者注:預設緩衝區大小8 * 1024B),程式碼如下:
OutputStream output = new BufferedOutputStream(new FileOutputStream("c:\\data\\output-file.txt"));
也可以手動設定緩衝區大小,程式碼如下:
OutputStream output = new BufferedOutputStream(new FileOutputStream("c:\\data\\output-file.txt"), 8 * 1024);
為了更好地使用內建緩衝區的磁碟,同樣建議把緩衝區大小設定成1024的整數倍。
除了能夠為輸出流提供緩衝區以外,其餘方面BufferedOutputStream基本與OutputStream類似。唯一不同的時,你需要手動flush()方法確保寫入到此輸出流的資料真正寫入到磁碟或者網路中。
DataInputStream
DataInputStream可以使你從輸入流中讀取Java基本型別資料,而不必每次讀取位元組資料。你可以把InputStream包裝到DataInputStream中,然後就可以從此輸入流中讀取基本型別資料了,程式碼如下:
DataInputStream input = new DataInputStream(new FileInputStream("binary.data")); int aByte = input.read(); int anInt = input.readInt(); float aFloat = input.readFloat(); double aDouble = input.readDouble();//etc. input.close();
當你要讀取的資料中包含了int,long,float,double這樣的基本型別變數時,DataInputStream可以很方便地處理這些資料。
DataOutputStream
DataOutputStream可以往輸出流中寫入Java基本型別資料,例子如下:
DataOutputStream output = new DataOutputStream(new FileOutputStream("binary.data")); output.write(45); //byte data output.writeInt(4545); //int data output.writeDouble(109.123); //double data output.close();
其他方面與DataInputStream類似,不再贅述。