标题非常明显。在很多JRE javadoc中,我看到了短语“字节流”和“字符流”。
但它们不是同一个东西吗?或者它们在Java-land中略有不同(例如解释不同)?提前谢谢。
答案 0 :(得分:18)
在Java中,byte
与char
不同。因此,字节流与字符流不同。字节用于任意二进制数据;字符专门用于表示字符串构建块的数据。
但是如果char的宽度只有1个字节
除之外没有。
根据{{3}},char
是范围内的数字:
从
'\u0000'
到'\uffff'
,包括0到65535
但byte
是
从-128到127,包括
答案 1 :(得分:5)
他们是不同的。 char
是Java中的2字节数据类型:byte
是1字节数据类型。
修改:char
也是无符号类型,而byte
则不是。
答案 2 :(得分:4)
字节流只是普通字节,就像在HEX编辑器中打开文件时看到的那样。
字符与普通字节不同。 ASCII编码每个字符只使用1个字节,但对于许多其他编码则不然。例如,UTF-8 encoding可以使用1到4个字节来编码单个字符。字符流旨在抽象出基础编码,并生成一种编码的char
(在Java中,char
和String
使用UTF-16编码)。
根据经验:
处理文本时,必须使用字符流将字节解码为具有适当编码的字符。
当您处理二进制数据或二进制和文本混合时,必须使用字节流,否则它没有意义。如果一个字节序列表示某个编码中的字符串,那么您总是可以选择那些字节并使用String(byte[] bytes, Charset charset)
构造函数来获取字符串。
答案 3 :(得分:0)
一般来说,最好根据尺寸来谈论流,而不是它们携带的内容。字节流比字符流更直观,因为字符流使得我们必须仔细检查字符串确实是字节,而不是unicode字符,或任何花哨的东西。
char是一种表示,可以用字节表示,但字节总是一个字节。当字节将停止为8位时,所有世界都将燃烧。