我从 https://docs.oracle.com/javase/tutorial/essential/io/bytestreams.html 开始学习Java中的Basic IO
ByteStream 一次读取一个字节(8 位(。但是字符以 16 位 unicode 字符存储 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
我的问题或困惑是,如果字符以 16 位存储,那么一次读取 8 位的 FileInputStream 读取方法如何读取 16 位(哪个字符存储在内部(?
在 Java 中,字符串存储为char
值数组,char
是 16 位UTF-16
编码值。一些 Unicode 字符(例如表情符号(被编码为 2char
值。
文件是字节序列,因此要将字符串存储在文件中,必须对字符串进行编码。编码称为字符集,具体取决于您使用的字符集,字符是否占用 1 个字节、2 个字节或更多。
如今,文件通常以 UTF-8 编码,因此 Unicode 字符需要 1 到 4 个字节。
在Java中,InputStream
/OutputStream
类用于读取/写入字节。要读/写字符,您需要使用Reader
/Writer
,这通常是通过将InputStream
/OutputStream
用InputStreamReader
/OutputStreamWriter
包装来完成的,您可以指定应该使用哪个字符集将字节转换为/从char
值。