“ InputStream”和“ Reader”是否基本相同,以及“ OutputStream”和“ Writer”是否基本相同?

时间:2019-05-17 10:17:20

标签: java io

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

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

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

2 个答案:

答案 0 :(得分:3)

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

InputStreamOutputStream bytes 为单位。处理非文本信息(例如图像)时,将使用它们。

ReaderWriter使用字符。处理文本信息时会用到它们。

“是”和“否”。 :-) InputStreamReader都用于读取信息(分别是字节流或字符流),而OutputStreamWriter都用于写入信息(分别是字节流或字符流)。使用哪种取决于您要处理的数据类型。流是面向字节的。读者/作家是面向角色的。

两种数据之间有桥接类:

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

...但是大多数Reader / Writer子类从已经字符进行读取/写入的源/目的地,因此不处理字节完全没有例如,StringReader从字符串中读取字符。由于源(字符串)已基于字符 ,因此Reader永远不会处理字节,而只会处理字符。

答案 1 :(得分:1)

是的,您的想法正确。标准类InputStreamReaderOutputStreamWriter充当从字节流接口到字符流接口的适配器,仅要求指定字符集(通常为UTF-8)。该字符集将用于将传入的字节转换为Java的UTF-16字符类型,因此,从InputStream和Reader读取的实际字节始终相同是 not true。

InputStream通常用于读取任何类型的数据,而Reader仅适用于读取文本数据。