java - 对于可以用 1byte 表示的字符,字符和字节流转换为字符之间的区别
问题描述
从 java 文档 Here,它说:
字符流使用字节流执行物理 I/O,而字符流处理字符和字节之间的转换
这是如何发生的,当字符流类 read()
和write()
bytes(2) 就像字节流类一样,但是一次 1 并且它们都返回可以映射到char的整数类型。
假设所有可以用 1byte 编码的字符
除了字节数之外,这里的特殊翻译是什么?它与字节流转换为字符或处理字节流的字符和字节之间的转换有何不同?
-
解决方案
- 二进制数据:
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 不应该用于非文本二进制数据。
推荐阅读
- powerbi - 如何将我的数据源更改为 Power BI 上的 Sharepoint 数据源
- gradle - Gradle:在调用根任务时排除触发子项目任务
- reactjs - 如何在 React Apollo 的查询变量中传递全局函数值
- aspnetboilerplate - 异常运行测试“无法注册 IUserAppService”
- ruby-on-rails - 尝试使用 db:create 时出现“错误:Rake 中止”
- firefox - Kibana - 切换仪表板后删除的过滤器重新出现
- python - 如何从数据框中提取反义词并将其放入另一个使用 wordnet python
- c# - 如何预热 EF Core?
- kiwi-tcms - 将 Kiwi TCMS 从 v6.3 升级到 v6.4
- python - 树莓派项目题控机