繁体   English   中英

Java - 字节流与字符流?

[英]Java - stream of bytes vs. stream of characters?

标题非常明显。 在很多JRE javadocs中,我看到了遍布各处的短语“ 字节流 ”和“ 字符流 ”。

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

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

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

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

'\''\￿'包括0到65535

但是一个byte是该范围内的数字

从-128到127,包括在内

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

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

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

字符与普通字节不同。 ASCII编码每个字符只使用1个字节,但对于许多其他编码则不然。 例如, UTF-8编码可以使用1到4个字节来编码单个字符。 字符的流被设计成抽象掉底层编码,并产生char一个类型的编码的(在Java中, charString使用UTF-16编码)。

根据经验:

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM