Java - 字节流与字符流?
标题非常不言自明。在很多JRE javadocs中,我看到到处都是短语“字节流”和“字符流”。
但它们不是一回事吗?还是在Java-land中它们略有不同(例如,解释不同)?提前致谢。
标题非常不言自明。在很多JRE javadocs中,我看到到处都是短语“字节流”和“字符流”。
但它们不是一回事吗?还是在Java-land中它们略有不同(例如,解释不同)?提前致谢。
在 Java 中,a 与 .因此,字节流不同于字符流。字节用于任意二进制数据;字符专门用于表示字符串构建基块的数据。byte
char
但是如果字符的宽度只有 1 个字节
但事实并非如此。根据 JLS §4.2.1 a 是该范围内的一个数字:char
从到(含),即从 0 到 65535
'\u0000'
'\uffff'
但 a 是范围内的数字byte
从 -128 到 127(含)
字节流只是纯字节,就像您在十六进制编辑器中打开文件时所看到的那样。
字符不同于纯字节。ASCII 编码每个字符正好使用 1 个字节,但对于许多其他编码则不然。例如,UTF-8 编码可以使用 1 到 4 个字节来编码单个字符。字符流旨在抽象出底层编码,并产生一种类型的编码(在Java中,并使用UTF-16编码)。char
char
String
根据经验:
处理文本时,必须使用字符流将字节解码为具有适当编码的字符。
当您处理二进制数据或二进制和文本的混合时,必须使用字节流,否则它没有意义。如果一个字节序列表示某种编码中的字符串,那么你总是可以挑选出这些字节,并使用 String(byte[] bytes, Charset charset)
构造函数来取回 String。