继承自abstract class Reader
和abstract class Writer
的字符流具体子类是否具有自己的I / O实现,而不依赖于abstract class InputStream
和abstract class OutputStream
的具体子类,是基于字节的I / O?
我理解字符流类将字符编码格式作为附加责任,但是,
除abstract class Reader
和abstract class Writer
下的字节流类层次结构外,为什么我们在abstract class InputStream
和abstract class OutputStream
下都有单独的层次结构?
答案 0 :(得分:1)
当时这是一个巨大的语言设计决策,在java中有Unicode文本,能够组合所有脚本:
byte[]
,InputStream/OutputStream
。String/char
(16位UTF-16),Reader/Writer
。从二进制数据到文本和反向的步骤总是涉及需要编码字节的转换。
由于Java还使用包装子类,如BufferedReader,StringReader,基类读取器/写入器,其中合理。 Java选择了这个,并且:
通过这种方式,您可以使用带有Reader
参数的文本处理方法。
与C相比,java因此具有单独的byte
类型和2字节char
类型,持有UTF-16。在java中,几乎不应该尝试在String中保存二进制数据,或者将字节转换为char。
答案 1 :(得分:0)
Character是否具有继承自抽象类的具体子类类Reader和抽象类Writer有自己的I / O实现,而不依赖于抽象类InputStream和抽象类OutputStream的具体子类,它们是基于字节的I / O?< / p>
没有
我理解字符流类将字符编码格式作为附加责任
好。
但是,除了抽象类InputStream和抽象类OutputStream下的字节流类层次结构之外,为什么我们在抽象类Reader和抽象类Writer下给出了单独的层次结构?
出于刚刚描述的目的。它们本质上是一系列过滤器,它们根据字符而不是字节重新定义I / O API。