文件通道位置和字符串长度

发布于 2024-11-12 14:33:10 字数 134 浏览 4 评论 0 原文

在Java中,字符的长度是2个字节,但是当我使用字节缓冲区将字符串写入文件时,文件通道位置会按字符数递增。我读到 Filechannel.position() 方法返回从文件开头到当前位置的字节数,因此它不应该增加 2*numberof chars 吗?

In Java chars are 2 bytes long, But when I write a string to a file using a bytebuffer the filechannel position increments by the number of chars. I read that the Filechannel.position() method returns the number of bytes from the beginning of the file to the current position so shoudnt it increment by 2*numberof chars?.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

无人接听 2024-11-19 14:33:10

在 Java 中,字符的长度为 2 个字节

在 JVM 内的长度为 2 个字节。写出时,它们的长度可以是 1-4 个字节,具体取决于字符集。

但是当我将字符串写入文件时
使用字节缓冲区文件通道
位置按数量增加
字符。

不,它按字节数递增。

我读到 Filechannel.position()
方法返回字节数
从文件开头到
目前的位置所以不应该吗
增加 2*numberof chars?

不,你的问题是基于两个谬论。

In Java chars are 2 bytes long

Inside the JVM. When written out they can be 1-4 bytes long depending on the character set.

But when I write a string to a file
using a bytebuffer the filechannel
position increments by the number of
chars.

No, it increments by the number of bytes.

I read that the Filechannel.position()
method returns the number of bytes
from the beginning of the file to the
current position so shoudnt it
increment by 2*numberof chars?

No. Your question is founded on two fallacies.

滥情哥ㄟ 2024-11-19 14:33:10

不完全是。在 Java 中,char 类型的位宽是 byte 类型的两倍,但这仅意味着字符可以两个字节长。这取决于字符串的字符编码,但使用 UTF-8 编码(默认)时,对于 0 到 127 之间的字符,字符仅编码为一个字节,但对于超过此范围的字符,则编码为多个字节(当设置高位时,它会被编码为多个字节)。表示下一个字节也是当前字符的一部分)

对于仅由 0-127 个字符组成的字符串(即“普通文本”),字节长度将等于字符长度。

如果您的字符串包含 0-127 范围之外的字符,则字节长度将大于字符数。

Not quite. In Java, the char type is twice the bit width of the byte 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文