java - 输入流与读取器

标签 java inputstream streamreader java-io

我正在查看输入输出部分,有太多的类和接口(interface),我有点困惑。
正如文档所述 InputStream是基于字节的流,而 Reader是基于字符的流。但据我正确理解,它们之间的唯一区别是 Reader每次读取两个字节,而不是一次读取一个字节,如 InputStream做。
因此我不明白有什么区别:
使用 InputStream

 byte[] bytes = new byte[2];
    InputStream in = new FileInputStream("input.txt");
    int bytesRead = in.read(bytes);
    while(bytesRead != -1) {
      doSomethingWithData(data);
      bytesRead = inputstream.read(data);
    }

使用 Reader

Reader reader = new InputStreamReader(new FileInputStream("input.txt"));
int data = reader.read();
while (data != -1) {
   doSomethingWithData(data);
   data = reader.read();
}

我对这些方面真的很困惑。请详细解释一下。谢谢。

最佳答案

您可以使用Reader来读取文本数据。它支持一些字符编码,例如 ISO、UTF-8。如果您想读取具有某种编码的文本文件,那么您可以使用 Reader,例如 - BufferedReaderStringReader 等。

并且可以使用Stream (InputStream, OutputStream)来操作二进制数据。例如,您想读取图像文件,则可以使用FileInputStream,当您想将其保存到磁盘时,则可以使用FileOutputStream

关于java - 输入流与读取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797772/

相关文章:

java - 如何获取cachedrowset特定列的原始值?

Android 蓝牙 : java. io.IOException: 服务发现失败

c# - 流阅读器输出

vb.net 逐行读取文件并复制该行的某些部分

java - 下午 4 点就下类了

java - 是否有类似 bsdiff/Courgette 的 jar 文件?

java - 为什么他们在从输入流读取时使用 "while"语句?

c# - 在C#中同时读写一个文件

java - Spring RestTemplate 最适合发送一些数据并期望不返回的方法

java - 与 Java 的 java.io.FileInputStream.read() 等效的 C++ 是什么?