微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 我什么时候应该使用InputStreamReader和OutputStreamWriter?

Java Tutorial站点,我们知道InputStreamReader和OutputStreamWriter可以在字节和字符之间转换流.

InputStreamReader将从输入读取的字节转换为字符,而OutputStreamWriter将字符转换为字节以输出.

但什么时候应该使用这两个类?

我们逐字节输入/输出流输入/输出,逐字符输入/输出读/写输出/输出.

因此,当使用InputStreamReader从字节流中输入字符时,为什么不直接使用Reader类(或其子类)来读取字符?为什么不使用OutputStream而不是OutputStreamWriter直接写入字节?

编辑:
我什么时候需要使用InputStreamReader和OutputStreamWriter在字节和字符之间转换流?

编辑:
在哪种情况下我应该关心编码方案?

解决方法

要了解此目的,您需要牢记以下内容.在Java中,char和String用于表示为Unicode的“text”,而byte或byte []用于二进制数据.字节不是文本.字节可以表示编码文本…但是必须先解码它们才能在它们上使用char和String类型.

So when using InputStreamReader to input characters from byte stream,why not just use Reader class (or its sub classes) to read character directly?

(InputStreamReader是Reader的子类,所以它不是“要么……或者……”.)

InputStreamReader的目的是使InputStream适应Reader.此适配器负责将文本从字节解码为包含Unicode codepoints1的字符.

因此,当您有一个现有的InputStream(例如来自套接字)时,或者当您需要更多地控制编码方案的选择时,您将使用它. (重新使用后者 – 您可以使用FileReader直接打开文件,但是隐式使用文件认平台编码.通过使用FileInputStream – > InputStreamReader,您可以明确指定编码方案.)

Why not use OutputStream instead of OutputStreamWriter to write bytes directly?

它的编码又来了.如果要将文本写入OUtputStream,则必须根据某种编码方案对其进行编码;例如

os.write(str.getBytes("UTF-8"));

通过使用Writer,您可以将编码移动到不那么突兀的输出管道中,并且通常可以更有效地完成.

1 – 或更严格地说,是Unicode代码点的16位表示.

原文地址:https://www.jb51.cc/java/120806.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐