2012-07-17 53 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))); 
相关问题