Java - 字节流与字符流?

IAm*_*aja 11 java byte stream char

标题非常明显.在很多JRE javadocs中,我看到了遍布各处的短语" 字节流 "和" 字符流 ".

但他们不一样吗?或者它们在Java-land中略有不同(例如解释不同)?提前致谢.

Mat*_*all 20

在Java中,a byte与a不同char.因此,字节流与字符流不同.字节用于任意二进制数据; 字符专门用于表示字符串构造块的数据.

但如果char的宽度只有1个字节

除了它不是. 根据JLS§4.2.1, a char是范围内的数字:

从包含'\u0000''\uffff'包含,即从0到65535

但是a byte是该范围内的数字

从-128到127,包括在内

  • 谁说`char`的宽度只有1个字节?http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html (4认同)

nha*_*tdh 7

字节流只是普通的字节,就像您在 HEX 编辑器中打开文件时所看到的一样。

字符不同于普通字节。ASCII 编码每个字符正好使用 1 个字节,但对于许多其他编码来说并非如此。例如,UTF-8 编码可能使用 1 到 4 个字节来编码单个字符。字符流旨在抽象出底层编码,并产生char一种编码类型(在 Java 中,charString使用 UTF-16 编码)。

根据经验:

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

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


pam*_*let 5

它们是不同的.char是Java中的2字节数据类型:byte是1字节的数据类型.

编辑:char也是无符号类型,而byte不是.