我试过阅读文档,但没有解释什么是限制、标记等。令人讨厌的是 ByteBuffer.limit 函数的描述说它返回限制。现在什么是限制?跟容量一样还是不一样...
一天结束,我想知道我“放入”缓冲区的字节数
如果我分配大小为 1024 的缓冲区并在其中写入单词“hello”。如何获得写入缓冲区的 5 个字节的结果?
谢谢
java.io.Buffer 文档中解释了您想知道的内容。
缓冲区的容量是它包含的元素数量。缓冲区的容量永远不会是负数,也永远不会改变。
缓冲区的限制是不应读取或写入的第一个元素的索引。缓冲区的限制永远不会是负数,也永远不会大于其容量。
缓冲区的位置是要读取或写入的下一个元素的索引。缓冲区的位置永远不会是负数,也永远不会大于其限制。
不变量
以下不变量适用于标记、位置、限制和容量值:
0 <= mark <= position <= limit <= capacity
新创建的缓冲区始终具有零位置和未定义的标记。初始限制可能为零,也可能是其他值,具体取决于缓冲区的类型及其构造方式。新分配的缓冲区的每个元素都被初始化为零。
标记和重置
A buffer's mark is the index to which its position will be reset when the reset method is invoked. The mark is not always defined, but when it is defined it is never negative and is never greater than the position. If the mark is defined then it is discarded when the position or the limit is adjusted to a value smaller than the mark. If the mark is not defined then invoking the reset method causes an InvalidMarkException to be thrown.
The write() method returns the numbered bytes transferred. You're overcomplicating this.