文件通道位置和字符串长度
在Java中,字符的长度是2个字节,但是当我使用字节缓冲区将字符串写入文件时,文件通道位置会按字符数递增。我读到 Filechannel.position() 方法返回从文件开头到当前位置的字节数,因此它不应该增加 2*numberof chars 吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 JVM 内的长度为 2 个字节。写出时,它们的长度可以是 1-4 个字节,具体取决于字符集。
不,它按字节数递增。
不,你的问题是基于两个谬论。
Inside the JVM. When written out they can be 1-4 bytes long depending on the character set.
No, it increments by the number of bytes.
No. Your question is founded on two fallacies.
不完全是。在 Java 中,
char
类型的位宽是byte
类型的两倍,但这仅意味着字符可以两个字节长。这取决于字符串的字符编码,但使用 UTF-8 编码(默认)时,对于 0 到 127 之间的字符,字符仅编码为一个字节,但对于超过此范围的字符,则编码为多个字节(当设置高位时,它会被编码为多个字节)。表示下一个字节也是当前字符的一部分)对于仅由 0-127 个字符组成的字符串(即“普通文本”),字节长度将等于字符长度。
如果您的字符串包含 0-127 范围之外的字符,则字节长度将大于字符数。
Not quite. In Java, the
char
type is twice the bit width of thebyte
type, but that only means chars can be two bytes long. It depends on your String's character encoding, but with UTF-8 encoding (the default), chars are encoded as only one byte for chars between 0 and 127, but multiple bytes for chars over this range (when the high bit is set, it means the next byte is also part of the current char)For Strings made of only 0-127 characters (ie "normal text"), byte length will equal char length.
If your String contains characters outside the range 0-127, byte length will be greater than the number of characters.