【问题标题】:Difference between character and byte stream translation to character for characters that can be represented with 1byte对于可以用 1byte 表示的字符,字符和字节流转换为字符之间的区别
【发布时间】:2020-07-21 22:23:57
【问题描述】:
来自 java 文档
Here,
它说:
字符流使用字节流执行物理 I/O,字符流处理字符和字节之间的转换
这是怎么发生的,当字符流类 read() 和write() bytes(2) 就像字节流类 一样,但是 1 在一个时间,它们都返回整数类型,可以映射到char。
-
【问题讨论】:
标签:
java
stream
inputstream
reader
【解决方案1】:
- 二进制数据:
byte, InputStream/OutputStream;
- 文本(Unicode):
String, char(UTF-16 2 字节), Reader/Writer。
这意味着两者之间应该始终使用二进制数据的 Charset 编码进行转换。
什么是恼人的:
-
InputStream.read() 返回一个 int:一个字节值,或 -1 = 文件结尾。
在 Windows 下发生的单字节编码具有相同的前 128 个字符,采用纯 7 位 ASCII,StandardCharsets.US_ASCII。但其余 128 个字节(希腊语、俄语、斯洛瓦克语、挪威语等)有所不同。
Java 决定在内部使用 Unicode,因此所有脚本都可以组合成一个字符串。
因此总会有转换。并且 String 不应该用于非文本二进制数据。