本小節簡要概括 Java IO 中的 Buffered 和 Data 的輸入輸出流,主要涉及以下 4 個類型的流:BufferedInputStream、BufferedOutputStream、DataInputStream、DataOutputStream。
BufferedInputStream
BufferedInputStream 能爲輸入流提供緩衝區,能提高很多 IO 速度。你可以一次讀取一大塊數據,而不需要每次從網絡或者磁盤中一次讀取一個字節。特別是在訪問大量磁盤數據時,緩衝通常會讓 IO 快上很多。
爲了給你的輸入流加上衝緩衝,你需要把流包裝到 BufferedInputStream 中:
InputStream input = new BufferedInputStream(new FileInputStream("c:\\data\\text.txt"));
很簡單吧,你可以給 BufferedInputStream 的構造函數傳遞一個值,設置內部使用的緩衝區的大小。(默認爲 8 * 1024B)
InputStream input = new BufferefInputStream(new FileInputSteam("c:data\\text.txt"), 8 * 1024);
這個樣例設置了 8KB 的緩衝區。最好把緩衝區設置成爲 1024 字節的整數倍,這樣能夠更好的利用內置緩衝區的磁盤。
除了能夠爲輸入流提供緩衝區外,其餘方面基本和 InputStream 類似。
BufferedOutputStream
與 BufferedInputSream 類似,BufferOutputStream 可以爲輸出流提供緩衝區。可以構造一個使用默認大小的緩衝區的 BufferedOutputStream。
緩衝區默認大小
OutputStream output = new BufferedOutputStream(new FileOutputStream("c:\\data\\text.txt"));
自定義緩衝區大小
OutputStream output = new BufferedOutputStream(new FileOutputStream("c:\\data\\text.txt"), 8*1024);
DataInputStream
DataInputStream 可以使你從輸入流中讀取 Java 基本類型數據,而不必每次讀取字節數據。你可以把 InputStream 包裝到 DataInputStream 中,然後就可以從輸入流中讀取基本類型數據了:
DataInputStream input= new DataInputStream(new FileInputStream("text.data"));
int aByte = input.read();
int aInt = input.readInt();
int aFloat = input.readFloat();
int aDouble = input.readDouble();
input.close();
當你要讀取的數據中包含了 int、long、float、doubule 這樣的基本類型變量時,DataInputStream 可以很方便的處理這些數據。
DataOutputStream
DataOutputStream 可以往輸出流中寫入 Java 基本類型數據:
DataOutputStream output = new DataOutputStream(new FileOutputStream("text.data"));
output.write(123);
其他方面和 DataInputStream 類似。