标题不言自明。在很多JRE javadocs中,我看到到处都是"字节流"one_answers"字符流"这样的短语。
但是它们不是一样的吗?或者它们在java语言中是否略有不同(例如解释不同)?
在Java中,byte
与char
不是一回事。因此字节流不同于字符流。字节用于存储任意二进制数据;字符是专门用于表示字符串构建块的数据的。
但是如果一个字符的宽度只有1个字节
除了它不是根据JLS第4.2.1节,a char
是一个范围内的数字:
从
'u0000'
到'uffff'
,即从0到65535
但是byte
是在
从-128到127,包括
字节流只是普通的字节,就像你在十六进制编辑器中打开文件时看到的那样。
Character不同于普通的byte。ASCII编码每个字符正好使用1个字节,但对于许多其他编码来说并非如此。例如,UTF-8编码可以使用1到4个字节来编码单个字符。字符流被设计为抽象掉底层编码,并产生一种编码类型的char
(在Java中,char
和String
使用UTF-16编码)。
根据经验:
-
在处理文本时,必须使用字符流将字节解码为具有适当编码的字符。
-
当你处理二进制数据或二进制和文本的混合数据时,你必须使用字节流,否则就没有意义了。
如果一个字节序列以某种编码表示一个String,那么你总是可以挑选出这些字节并使用
String(byte[] bytes, Charset charset)
构造函数来返回String。它们是不同的。char
是Java中的2字节数据类型,byte
是1字节数据类型。
编辑:char
也是unsigned类型,而byte
不是。
一般来说,最好是从流的大小来讨论流,而不是它们携带的内容。字节流比字符流更直观,因为字符流使我们必须仔细检查字符是否确实是字节,而不是unicode字符,或者其他花哨的东西。
char是一种表示法,它可以用字节表示,但字节总是一个字节。当字节不再是8位时,整个世界将会燃烧。