jdk/src/java.base/share/classes/sun/nio/cs/StreamEncoder.java
changeset 28850 4996a75e8bfb
parent 25859 3317bb8137f4
child 34390 feb9879cd993
equal deleted inserted replaced
28849:ccf9d86e52ec 28850:4996a75e8bfb
   241         while (lcb.hasRemaining() || endOfInput) {
   241         while (lcb.hasRemaining() || endOfInput) {
   242             CoderResult cr = encoder.encode(lcb, bb, endOfInput);
   242             CoderResult cr = encoder.encode(lcb, bb, endOfInput);
   243             if (cr.isUnderflow()) {
   243             if (cr.isUnderflow()) {
   244                 if (lcb.hasRemaining()) {
   244                 if (lcb.hasRemaining()) {
   245                     leftoverChar = lcb.get();
   245                     leftoverChar = lcb.get();
   246                     if (cb != null && cb.hasRemaining())
   246                     if (cb != null && cb.hasRemaining()) {
   247                         flushLeftoverChar(cb, endOfInput);
   247                         lcb.clear();
       
   248                         lcb.put(leftoverChar).put(cb.get()).flip();
       
   249                         continue;
       
   250                     }
   248                     return;
   251                     return;
   249                 }
   252                 }
   250                 break;
   253                 break;
   251             }
   254             }
   252             if (cr.isOverflow()) {
   255             if (cr.isOverflow()) {
   263         throws IOException
   266         throws IOException
   264     {
   267     {
   265         CharBuffer cb = CharBuffer.wrap(cbuf, off, len);
   268         CharBuffer cb = CharBuffer.wrap(cbuf, off, len);
   266 
   269 
   267         if (haveLeftoverChar)
   270         if (haveLeftoverChar)
   268         flushLeftoverChar(cb, false);
   271             flushLeftoverChar(cb, false);
   269 
   272 
   270         while (cb.hasRemaining()) {
   273         while (cb.hasRemaining()) {
   271         CoderResult cr = encoder.encode(cb, bb, false);
   274             CoderResult cr = encoder.encode(cb, bb, false);
   272         if (cr.isUnderflow()) {
   275             if (cr.isUnderflow()) {
   273            assert (cb.remaining() <= 1) : cb.remaining();
   276                 assert (cb.remaining() <= 1) : cb.remaining();
   274            if (cb.remaining() == 1) {
   277                 if (cb.remaining() == 1) {
   275                 haveLeftoverChar = true;
   278                     haveLeftoverChar = true;
   276                 leftoverChar = cb.get();
   279                     leftoverChar = cb.get();
   277             }
   280                 }
   278             break;
   281                 break;
   279         }
   282             }
   280         if (cr.isOverflow()) {
   283             if (cr.isOverflow()) {
   281             assert bb.position() > 0;
   284                 assert bb.position() > 0;
   282             writeBytes();
   285                 writeBytes();
   283             continue;
   286                 continue;
   284         }
   287             }
   285         cr.throwException();
   288             cr.throwException();
   286         }
   289         }
   287     }
   290     }
   288 
   291 
   289     void implFlushBuffer() throws IOException {
   292     void implFlushBuffer() throws IOException {
   290         if (bb.position() > 0)
   293         if (bb.position() > 0)