标题已经很明确了。在许多JRE javadocs中,我看到“字节流”和“字符流”这些短语无处不在。
但它们不是一样的吗?或者它们在Java世界中略有不同(例如,解释方式不同)?提前致谢。
byte
和char
不是同一件事。因此,字节流与字符流不同。字节用于任意二进制数据;而字符专门用于表示字符串的构建块的数据。
除了它并不是。根据JLS §4.2.1,但是如果一个char只有1个字节宽度
char
是一个范围内的数字:
但是从
'\u0000'
到'\uffff'
,即从0到65535
byte
是一个范围内的数字:
从-128到127(含)
字节流就是纯粹的字节,就像你在HEX编辑器中打开文件时看到的一样。
字符与纯字节不同。ASCII编码每个字符正好使用1个字节,但对于许多其他编码来说并非如此。例如,UTF-8编码可以使用1到4个字节来编码单个字符。字符流被设计为抽象出底层编码,并生成某种编码的char
字符(在Java中,char
和String
使用UTF-16编码)。
作为经验法则:
当您处理文本时,必须使用字符流以适当的编码将字节解码为字符。
当您处理二进制数据或混合二进制和文本时,必须使用字节流,因为否则没有意义。如果一系列字节表示某种编码中的字符串,则始终可以选择这些字节并使用String(byte[] bytes, Charset charset)
构造函数以获取字符串。
它们是不同的。在Java中,char
是一个2字节的数据类型:byte
是一个1字节的数据类型。
编辑: char
也是一种无符号类型,而byte
则不是。
byte
,char
等),但如果一个char
只有1个字节的宽度,那么将输入流存储为字节数组与字符数组有什么不同?这就是我的问题所在。 - IAmYourFajachar
类型只有1字节宽度?http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html - Matt Ball