我已经尝试过阅读文档了,但是没有解释什么是限制,标记等。一个不错的事情是ByteBuffer.limit函数的描述说它返回了限制。现在有什么限制?是否与容量相同或不同......
一天结束时,我想知道我已经把多少字节放入缓冲区
如果我分配大小为1024的缓冲区并在其中写入“hello”。如何将5个字节的结果写入缓冲区?
由于
答案 0 :(得分:2)
缓冲区的容量是它包含的元素数量。该 缓冲区的容量永远不会消极,永远不会改变。
缓冲区的限制是不应该的第一个元素的索引 被读或写。缓冲区的限制永远不会消极,永远不会 超过其容量。
缓冲区的位置是要读取的下一个元素的索引或 书面。缓冲区的位置永远不会消极,永远不会更大 超过其限制。
<强>不变量强>
以下不变量适用于标记,位置,限制和 容量值:
0 <= mark <= position <= limit <= capacity
新创建的缓冲区始终具有零位和标记 未定义。初始限制可能为零,或者可能是其他限制 值取决于缓冲区的类型和方式 它是建造的。新分配的缓冲区的每个元素都是 初始化为零。
标记和重置
缓冲区标记是其位置将被重置的索引 调用reset方法。标记并不总是定义,而是何时定义 它被定义为永远不会消极,永远不会大于 位置。如果定义了标记,则在标记时将其丢弃 将位置或限制调整为小于标记的值。如果 标记未定义然后调用重置方法导致 抛出InvalidMarkException。
答案 1 :(得分:2)
write()方法返回传输的编号字节。你过度复杂了。