1. 程式人生 > >Java IO: Buffered和Data

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類似,不再贅述。