繁体   English   中英

Java中的字符I / O流与字节I / O流

[英]character I/O stream vs Byte I/O stream in Java

abstract class Readerabstract class Writer继承的Character流具体子类类是否具有自己的I / O实现,而不依赖于基于字节的I / O abstract class InputStreamabstract class OutputStream具体子abstract class InputStream

我知道字符流类将字符编码格式作为额外的责任,但是,

为什么除了在abstract class InputStreamabstract class OutputStream下的字节流类层次结构之外,在abstract class Readerabstract 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM