[英]character I/O stream vs Byte I/O stream in Java
从abstract class Reader
和abstract class Writer
继承的Character流具体子类类是否具有自己的I / O实现,而不依赖于基于字节的I / O abstract class InputStream
和abstract class OutputStream
具体子abstract class InputStream
?
我知道字符流类将字符编码格式作为额外的责任,但是,
为什么除了在abstract class InputStream
和abstract class OutputStream
下的字节流类层次结构之外,在abstract class Reader
和abstract class Writer
下又给出了单独的层次结构?
当时,这是一个巨大的语言设计决策,因为Java中有Unicode文本,能够合并所有脚本:
byte[]
, InputStream/OutputStream
。 String/char
(16位UTF-16), Reader/Writer
。 从二进制数据到文本和逆数据的步骤始终涉及需要对字节进行编码的转换 。
由于Java也使用包装子类,例如BufferedReader,StringReader,明智的基类Reader / Writer。 Java选择了这个,并且:
这样,您便可以使用带有Reader
参数的文本处理方法。
与C相比,Java具有一个单独的byte
类型和一个2字节的char
类型,它们保存UTF-16。 在Java中,几乎应该永远不要尝试将二进制数据保存在String中或将字节转换为char。
从抽象类Reader和抽象类Writer继承的Character流具体子类类是否具有自己的I / O实现,而不依赖于抽象类InputStream和抽象类OutputStream的具体子类(它们是基于字节的I / O)?
没有。
我了解字符流类将字符编码格式作为额外的责任
好。
但是,除了在抽象类InputStream和抽象类OutputStream下的字节流类层次结构之外,为什么还要在抽象类Reader和抽象类Writer下分别给出层次结构?
出于您刚才描述的目的。 它们本质上是一系列过滤器,它们根据字符而不是字节来重新定义I / O API。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.