15

标题是不言自明的。在很多 JRE javadocs 中,我到处都能看到短语“字节流”和“字符流”。

但它们不是一样的吗?还是它们在 Java 领域略有不同(例如解释不同)?提前致谢。

4

4 回答 4

24

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

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

除了它不是。 根据JLS §4.2.1 achar是范围内的数字:

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

但 abyte是范围内的数字

从 -128 到 127(含)

于 2013-02-26T20:06:32.567 回答
7

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

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

根据经验:

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

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

于 2013-02-26T20:10:46.267 回答
5

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

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

于 2013-02-26T20:07:13.477 回答
0

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

char 是一种表示形式,可以用一个字节表示,但一个字节总是一个字节。当字节不再是 8 位时,所有的世界都会被烧毁。

于 2013-02-26T20:13:36.680 回答