閱讀41 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java IO: Buffered和Data

本小節會簡要概括Java IO中Buffered和data的輸入輸出流,主要涉及以下4個類型的流:BufferedInputStream,BufferedOutputStream,DataInputStream,DataOutputStream。

BufferedInputStream

原文鏈接

BufferedInputStream能為輸入流提供緩衝區,能提高很多IO的速度。你可以一次讀取一大塊的數據,而不需要每次從網絡或者磁盤中一次讀取一個字節。特別是在訪問大量磁盤數據時,緩衝通常會讓IO快上許多。

為了給你的輸入流加上緩衝,你需要把輸入流包裝到BufferedInputStream中,代碼如下:

1 InputStream input = new BufferedInputStream(new FileInputStream("c:\\data\\input-file.txt"));

很簡單,不是嗎?你可以給BufferedInputStream的構造函數傳遞一個值,設置內部使用的緩衝區設置大小(譯者注:默認緩衝區大小8 * 1024B),就像這樣:

1 InputStream input = new BufferedInputStream(new FileInputStream("c:\\data\\input-file.txt"), 8 1024);

這個例子設置了8KB的緩衝區。最好把緩衝區大小設置成1024字節的整數倍,這樣能更高效地利用內置緩衝區的磁盤。

除了能夠為輸入流提供緩衝區以外,其餘方麵BufferedInputStream基本與InputStream類似。

BufferedOutputStream

原文鏈接

與BufferedInputStream類似,BufferedOutputStream可以為輸出流提供緩衝區。可以構造一個使用默認大小緩衝區的BufferedOutputStream(譯者注:默認緩衝區大小8 * 1024B),代碼如下:

1 OutputStream output = new BufferedOutputStream(new FileOutputStream("c:\\data\\output-file.txt"));

也可以手動設置緩衝區大小,代碼如下:

1 OutputStream output = new BufferedOutputStream(new FileOutputStream("c:\\data\\output-file.txt"), 8 1024);

為了更好地使用內置緩衝區的磁盤,同樣建議把緩衝區大小設置成1024的整數倍。
除了能夠為輸出流提供緩衝區以外,其餘方麵BufferedOutputStream基本與OutputStream類似。唯一不同的時,你需要手動flush()方法確保寫入到此輸出流的數據真正寫入到磁盤或者網絡中。

DataInputStream

原文鏈接

DataInputStream可以使你從輸入流中讀取Java基本類型數據,而不必每次讀取字節數據。你可以把InputStream包裝到DataInputStream中,然後就可以從此輸入流中讀取基本類型數據了,代碼如下:

01 DataInputStream input = new DataInputStream(new FileInputStream("binary.data"));
02  
03 int aByte = input.read();
04  
05 int anInt = input.readInt();
06  
07 float aFloat = input.readFloat();
08  
09 double aDouble = input.readDouble();//etc.
10  
11 input.close();

當你要讀取的數據中包含了int,long,float,double這樣的基本類型變量時,DataInputStream可以很方便地處理這些數據。

DataOutputStream

原文鏈接

DataOutputStream可以往輸出流中寫入Java基本類型數據,例子如下:

1 DataOutputStream output = new DataOutputStream(new FileOutputStream("binary.data"));
2  
3 output.write(45);
4  
5 //byte data output.writeInt(4545);
6  
7 //int data output.writeDouble(109.123);
8  
9 //double data  output.close();

其他方麵與DataInputStream類似,不再贅述。

最後更新:2017-05-23 11:31:53

  上一篇:go  Java中的狀態模式實例教程
  下一篇:go  Java Reflection(九):泛型