在Java中,InputStream
和OutputStream
处理byte[]
,而Reader
和Writer
处理char[]
。
它们的输入或输出byte[]
和char[]
是否具有相同的值? (这是我的印象,因为IO中的char和字节具有相同的值)
换句话说,InputStream
和Reader
本质上是相同的,OutputStream
和Writer
本质上是相同的吗?
答案 0 :(得分:3)
它们本质上并不相同,但是它们针对不同类型的数据执行相同的操作。
InputStream
和OutputStream
以 bytes 为单位。处理非文本信息(例如图像)时,将使用它们。
Reader
和Writer
使用字符。处理文本信息时会用到它们。
“是”和“否”。 :-) InputStream
和Reader
都用于读取信息(分别是字节流或字符流),而OutputStream
和Writer
都用于写入信息(分别是字节流或字符流)。使用哪种取决于您要处理的数据类型。流是面向字节的。读者/作家是面向角色的。
两种数据之间有桥接类:
InputStreamReader
从InputStream
读取,并使用CharSet
(显式或按名称提供)将字节转换为字符。OutputStreamWriter
则相反:将字符转换为字节(再次通过CharSet
)并将字节写入OutputStream
。 ...但是大多数Reader
/ Writer
子类从已经字符进行读取/写入的源/目的地,因此不处理字节完全没有例如,StringReader
从字符串中读取字符。由于源(字符串)已基于字符 ,因此Reader
永远不会处理字节,而只会处理字符。
答案 1 :(得分:1)
是的,您的想法正确。标准类InputStreamReader和OutputStreamWriter充当从字节流接口到字符流接口的适配器,仅要求指定字符集(通常为UTF-8)。该字符集将用于将传入的字节转换为Java的UTF-16字符类型,因此,从InputStream和Reader读取的实际字节始终相同是 not true。
InputStream通常用于读取任何类型的数据,而Reader仅适用于读取文本数据。