java - `InputStream`和 `Reader`本质上是相同的, `OutputStream`和 `Writer`本质上是相同的吗?

标签 java io

在Java中,InputStreamOutputStream处理byte[],以及ReaderWriter char[]

  • 它们的输入或输出 byte[]char[] 本质上具有相同的值吗? (这是我的印象,因为IO中的char和byte具有相同的值)

  • 换句话说,InputStreamReader 本质上是相同的,OutputStreamWriter 本质上是相同的> 本质上是一样的?

最佳答案

它们本质上并不相同,但它们对不同类型的数据执行相同的操作。

InputStreamOutputStream字节为单位。您可以在处理非文本信息(例如图像)时使用它们。

ReaderWriter字符工作。您在处理文本信息时会使用它们。

所以"is"和“否”。 :-) InputStreamReader 都用于读取信息(分别是字节流或字符流),而 OutputStreamWriter 都用于写入信息(分别是字节流或字符流)。您使用哪个取决于您正在处理什么类型的数据。流是面向字节的。读者/作者以人物为导向。

两种数据之间有桥接类:

  • InputStreamReaderInputStream 读取并使用 CharSet(显式提供或按名称提供的)将字节转换为字符。
  • OutputStreamWriter反之亦然:将字符转换为字节(再次通过 CharSet)并将字节写入 OutputStream

...但大多数 Reader/Writer 子类读取/写入的源/目标已经基于字符,等等根本不处理字节。例如,StringReader从字符串中读取字符。由于源(字符串)已经基于字符,因此Reader不会处理字节,而只处理字符。

关于java - `InputStream`和 `Reader`本质上是相同的, `OutputStream`和 `Writer`本质上是相同的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56184368/

相关文章:

c++ - g++ 输出与 Visual Studio 输出之间的差异。 float 变量

Haskell - 执行后打印跟踪

java - 是否可以响应 http 错误,该代码在 java spring 中是可变的?

java - 正则表达式查找多个分隔符之间的任何内容

java - Jetty.util.MultiMap 抛出 ConcurrentModificationException

java - JAXB - 带有 java 注释的编码

Tomcat7 中的 Java 1.5 war 产生 InvokerServlet 异常?

java - 如果流是使用Java中的某些字符串或字节数组对象组成的,是否需要关闭InputStream?

java - 为 Web 界面设计 IO 适配器

c - 使用 printf to printf 打印字符串的一部分