2012-07-17 51 views
6

是什麼需要進行數據的輸入流

FileInputStream fstream = new FileInputStream ("file1.txt"); 
BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 

FileInputStream fstream = new FileInputStream ("file1.txt"); 
DataInputStream in = new DataInputStream(fstream); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

之間的區別難道我們真的需要一個DataInputStream在這裏?

+1

如果你想閱讀的文本,請不要使用DataInputStream類,它不是有用的更加混亂。 – 2012-08-15 11:27:14

回答

2

傳遞給InputStreamReader()構造函數的對象的重要性在於它將成爲將承擔任何同步保留的權重的對象。如果你不希望你的FileInputStream可能被許多呼叫所阻擋,那麼第二個選擇就是要走的路。請參閱the source of Reader.

1

它取決於:數據輸入流允許應用程序以獨立於機器的方式從基礎輸入流讀取原始Java數據類型。應用程序使用數據輸出流來寫入數據,稍後可以通過數據輸入流讀取數據。檢查JavaDoc

BufferedReader:從字符輸入流中讀取文本,緩衝字符以便高效地讀取字符,數組和行。

FileInputStream:使用FileInputStream,您將讀取以字節爲單位的文件數據。

2

FileInputStream用於讀取原始字節流,如 圖像數據。要閱讀字符流,請考慮使用 FileReader。

數據輸入流允許應用程序以獨立於機器的方式從基礎輸入流讀取原始Java數據類型 。一個 應用程序使用數據輸出流來寫入數據,這些數據稍後可以通過數據輸入流讀取 。

DataInputStream對於多線程訪問不一定安全。

FileInputStream僅爲您提供非常基本的界面。 當你想讀取數字,字符串(甚至複雜的對象)而不是字節時,這是一個痛苦。所以你使用第二個輸入流「包裝」第一個輸入流,這給你一個更有用的界面。 DataInputStream就是其中之一。

1

不,您的示例中不需要DataInputStream,因爲您最終將獲得BufferedReader以讀取數據。

什麼會,而不是意義是:

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("file1.txt"))); 

編輯:

爲什麼

FileInputStream fstream = new FileInputStream ("file1.txt"); 
BufferedInputStream br = new BufferedInputStream(fstream); 
DataInputStream dis = new DataInputStream(br); 

通常這會利用齊頭並進當您創建 「FILE1.TXT」 Java是否允許它,如果它沒有意義?因爲這是Decorator pattern,這是Decorator模式的缺點之一。

4

DataInputStream的使用是一個常見的錯誤,我相信它來自不同代碼片段的複製和粘貼。您想要將文件作爲文本讀取,例如BufferedReader或二進制例如DataInputStream類。它極不可能使用這兩種方法,並試圖導致混淆。

用於文中的緩衝

BufferedReader br = new BufferedReader(new FileReader(file)); 

對於二進制這是緩衝

DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file))); 
相關問題