moonfish0607
moonfish0607
2017-11-23 03:22

java sun.nio.cs.StreamEncoder 源码阅读的一些小问题

  • java
  • nio
  • 源码

在看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完整源码

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答

为你推荐

换一换