在看StreamEncoder源码吗对其中implWrite方法有点儿小疑问。
void implWrite(char cbuf[], int off, int len)
throws IOException
{
CharBuffer cb = CharBuffer.wrap(cbuf, off, len);
if (haveLeftoverChar)
flushLeftoverChar(cb, false);
while (cb.hasRemaining()) {
CoderResult cr = encoder.encode(cb, bb, false);
if (cr.isUnderflow()) {
assert (cb.remaining() <= 1) : cb.remaining();
if (cb.remaining() == 1) {
haveLeftoverChar = true;
leftoverChar = cb.get();
}
break;
}
if (cr.isOverflow()) {
assert bb.position() > 0;
writeBytes();
continue;
}
cr.throwException();
}
}
在执行完encode方法后,cb中position位置不是应该移到了limit位置吗,此时调用remaining方法不是应该为0吗,为什么源码中会对<=1进行判断,=1是什么情况下呢?
新人没啥金币,希望有大佬能指教,下面附上StreamEncoder的源码链接。
StreamEncoder完整源码