[英]Java - stream of bytes vs. stream of characters?
标题非常明显。 在很多JRE javadocs中,我看到了遍布各处的短语“ 字节流 ”和“ 字符流 ”。
但他们不一样吗? 或者它们在Java-land中略有不同(例如解释不同)? 提前致谢。
在Java中, byte
与char
。 因此,字节流与字符流不同。 字节用于任意二进制数据; 字符专门用于表示字符串构造块的数据。
但如果char的宽度只有1个字节
除了它不是。 根据JLS§4.2.1 , char
是范围内的数字:
从
'\ '
到'\'
包括0到65535
但是一个byte
是该范围内的数字
从-128到127,包括在内
他们是不同的。 char
是Java中的2字节数据类型: byte
是1字节数据类型。
编辑: char
也是无符号类型,而byte
不是。
字节流只是普通字节,就像在HEX编辑器中打开文件时看到的那样。
字符与普通字节不同。 ASCII编码每个字符只使用1个字节,但对于许多其他编码则不然。 例如, UTF-8编码可以使用1到4个字节来编码单个字符。 字符的流被设计成抽象掉底层编码,并产生char
一个类型的编码的(在Java中, char
和String
使用UTF-16编码)。
根据经验:
处理文本时,必须使用字符流将字节解码为具有适当编码的字符。
当您处理二进制数据或二进制和文本混合时,必须使用字节流,否则它没有意义。 如果一个字节序列表示某种编码的字符串,那么你总是可以选择那些字节并使用String(byte[] bytes, Charset charset)
构造函数来获取String。
一般来说,最好是根据它们的尺寸来谈论流,而不是它们携带的内容。 字节流比字符流更直观,因为字符流使得我们必须仔细检查字符串确实是字节,而不是unicode字符,或任何花哨的东西。
char是一种表示,可以用字节表示,但字节总是一个字节。 当字节将停止为8位时,所有世界都将燃烧。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.