Java - 字节流与字符流?

时间:2013-02-26 20:04:10

标签: java stream char byte

标题非常明显。在很多JRE javadoc中,我看到了短语“字节流”和“字符流”。

但它们不是同一个东西吗?或者它们在Java-land中略有不同(例如解释不同)?提前谢谢。

4 个答案:

答案 0 :(得分:18)

在Java中,bytechar不同。因此,字节流与字符流不同。字节用于任意二进制数据;字符专门用于表示字符串构建块的数据。

  

但是如果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中,charString使用UTF-16编码)。

根据经验:

  • 处理文本时,必须使用字符流将字节解码为具有适当编码的字符。

  • 当您处理二进制数据或二进制和文本混合时,必须使用字节流,否则它没有意义。如果一个字节序列表示某个编码中的字符串,那么您总是可以选择那些字节并使用String(byte[] bytes, Charset charset)构造函数来获取字符串。

答案 3 :(得分:0)

一般来说,最好根据尺寸来谈论流,而不是它们携带的内容。字节流比字符流更直观,因为字符流使得我们必须仔细检查字符串确实是字节,而不是unicode字符,或任何花哨的东西。

char是一种表示,可以用字节表示,但字节总是一个字节。当字节将停止为8位时,所有世界都将燃烧。