首页 > 解决方案 > 对于可以用 1byte 表示的字符,字符和字节流转换为字符之间的区别

问题描述

从 java 文档 Here,它说:

字符流使用字节流执行物理 I/O,而字符流处理字符和字节之间的转换

这是如何发生的,当字符流类 read()write()bytes(2) 就像字节流类一样,但是一次 1 并且它们都返回可以映射到char的整数类型

-

标签: javastreaminputstreamreader

解决方案


  • 二进制数据:byte, InputStream/OutputStream;
  • 文本(Unicode):(String, charUTF-16 2 字节), Reader/Writer

这意味着应该始终在两者之间进行转换,使用二进制数据的 Charset 编码。

什么是恼人:

  • InputStream.read()返回一个 int:一个字节值,或 -1 = 文件结尾。

在 Windows 下发生的单字节编码具有相同的前 128 个字符,采用纯 7 位 ASCII StandardCharsets.US_ASCII,. 但其余 128 个字节(希腊语、俄语、斯洛瓦克语、挪威语等)不同。

Java 决定在内部使用 Unicode,因此所有脚本都可以组合成一个字符串。

因此,总是有一个转换。并且 String 不应该用于非文本二进制数据。


推荐阅读