Mat*_*all 20
在Java中,a byte
与a不同char
.因此,字节流与字符流不同.字节用于任意二进制数据; 字符专门用于表示字符串构造块的数据.
但如果char的宽度只有1个字节
除了它不是.
根据JLS§4.2.1, a char
是范围内的数字:
从包含
'\u0000'
到'\uffff'
包含,即从0到65535
但是a byte
是该范围内的数字
从-128到127,包括在内
字节流只是普通的字节,就像您在 HEX 编辑器中打开文件时所看到的一样。
字符不同于普通字节。ASCII 编码每个字符正好使用 1 个字节,但对于许多其他编码来说并非如此。例如,UTF-8 编码可能使用 1 到 4 个字节来编码单个字符。字符流旨在抽象出底层编码,并产生char
一种编码类型(在 Java 中,char
并String
使用 UTF-16 编码)。
根据经验:
在处理文本时,必须使用字符流将字节解码为具有适当编码的字符。
当您处理二进制数据或二进制和文本的混合时,您必须使用字节流,否则它没有意义。如果一个字节序列以某种编码表示一个字符串,那么您总是可以挑选出这些字节并使用String(byte[] bytes, Charset charset)
构造函数来取回字符串。