2013-02-26 52 views
8

标题是不言自明的。在很多JRE javadoc中,我看到了各个地方的短语“字节流”和“字符流”。Java - 字节流与字符流?

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

回答

15

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

,但如果一个char只有1宽度

字节除了事实并非如此。 作为每the JLS §4.2.1一个char是在范围内的数:

'\u0000''\uffff'以下,也就是说,从0到65535

byte是在范围内的数

从-128到127,包括端点

+1

Thanks @Matt Ball - 据我所知,它们与字体类型('byte','char'等)不同,但如果char的宽度只有1个字节,那么存储输入流作为字节数组与字符数组?这是我的问题的根源。 – IAmYourFaja 2013-02-26 20:07:40

+4

谁说'char'的宽度只有1个字节? http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html – 2013-02-26 20:09:20

4

他们是不同的。 Characterchar是Java中的2字节数据类型。 Bytebyte是1字节数据类型。

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

3

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

字符与普通字节不同。 ASCII编码每个字符只使用1个字节,但对于许多其他编码则不是这样。例如,UTF-8 encoding可能会使用1到6个字节来编码单个字符。字符流旨在抽象出潜在的编码,并产生一种编码类型(在Java中,charString使用UTF-16编码)。

作为一个经验法则:

  • 当你正在处理的文本,则必须使用字符流字节与相应的编码,解码成文字。

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

0

通常情况下,最好根据它们的大小而不是它们携带的内容来讨论流。字节流比字符流更直观,因为字符流使我们必须仔细检查字符确实是一个字节,而不是一个Unicode字符,或任何奇怪的字符。

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

+0

_“当字节停止8位时,所有的世界都会燃烧。”_几乎没有。 http://en.wikipedia.org/wiki/Byte#History – 2013-02-26 20:23:18

+0

http://stackoverflow.com/questions/13615764/is-a-byte-always-8-bits – Dmitry 2013-02-26 20:27:52