Java 需要数据输入流

Java 需要数据输入流,java,datainputstream,Java,Datainputstream,两者的区别是什么 FileInputStream fstream = new FileInputStream ("file1.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 及 我们真的需要DataInputStream吗 视情况而定,数据输入流允许应用程序以独立于机器的方式从底层输入流读取基本Java数据类型。应用程序使用数据输出流写入数据,这些数据稍后可由数据输入流读取。检查 :从

两者的区别是什么

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


我们真的需要DataInputStream吗

视情况而定,数据输入流允许应用程序以独立于机器的方式从底层输入流读取基本Java数据类型。应用程序使用数据输出流写入数据,这些数据稍后可由数据输入流读取。检查

:从字符输入流读取文本,缓冲字符,以便有效读取字符、数组和行

:使用FileInputStream,您将以字节为单位读取文件数据

FileInputStream用于读取原始字节流,例如 图像数据。为了阅读字符流,请考虑使用 文件阅读器

数据输入流允许应用程序读取原始Java数据类型 以独立于机器的方式从底层输入流。一 应用程序使用一个数据输出流来写入数据,这些数据可以在以后更新 由数据输入流读取

对于多线程访问,DataInputStream不一定是安全的

FileInputStream只提供了一个非常基本的接口。
当您想要读取数字、字符串(甚至复杂对象)而不仅仅是字节时,这是一种痛苦。因此,您使用第二个输入流“包装”第一个输入流,这为您提供了一个更有用的接口。DataInputStream就是其中之一。

传递给
InputStreamReader()
构造函数的对象的重要意义在于,它将是承受任何同步保持重量的对象。如果您不希望您的
FileInputStream
可能被多次调用所阻塞,那么第二个选项就是解决方法。请参见

否,在您的示例中不需要DataInputStream,因为您最终获得了一个BufferedReader来读取数据

相反,有意义的是:

FileInputStream fstream = new FileInputStream ("file1.txt");
BufferedInputStream br = new BufferedInputStream(fstream);
DataInputStream dis = new DataInputStream(br);
通常,当您使用以下方法创建“file1.txt”时,这会同时进行:

编辑:


如果它真的没有意义,为什么Java允许它?因为这是装饰器模式的缺点之一。

使用DataInputStream是一个常见的错误,我认为这是由于复制和粘贴不同的代码片段造成的。您希望以文本(如BufferedReader)或二进制(如DataInputStream)的形式读取文件。您很可能不想同时使用这两种方法,并且尝试使用这两种方法可能会导致混淆

对于缓冲的文本

BufferedReader br = new BufferedReader(new FileReader(file));
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
对于缓冲的二进制文件

BufferedReader br = new BufferedReader(new FileReader(file));
DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));

如果您想阅读文本,请不要使用DataInputStream,它比有用的内容更容易混淆。