jdk/src/java.base/share/classes/sun/nio/cs/StreamEncoder.java
changeset 28850 4996a75e8bfb
parent 25859 3317bb8137f4
child 34390 feb9879cd993
--- a/jdk/src/java.base/share/classes/sun/nio/cs/StreamEncoder.java	Fri Feb 06 15:42:07 2015 -0800
+++ b/jdk/src/java.base/share/classes/sun/nio/cs/StreamEncoder.java	Mon Feb 09 11:37:56 2015 -0800
@@ -243,8 +243,11 @@
             if (cr.isUnderflow()) {
                 if (lcb.hasRemaining()) {
                     leftoverChar = lcb.get();
-                    if (cb != null && cb.hasRemaining())
-                        flushLeftoverChar(cb, endOfInput);
+                    if (cb != null && cb.hasRemaining()) {
+                        lcb.clear();
+                        lcb.put(leftoverChar).put(cb.get()).flip();
+                        continue;
+                    }
                     return;
                 }
                 break;
@@ -265,24 +268,24 @@
         CharBuffer cb = CharBuffer.wrap(cbuf, off, len);
 
         if (haveLeftoverChar)
-        flushLeftoverChar(cb, false);
+            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();
+            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;
             }
-            break;
-        }
-        if (cr.isOverflow()) {
-            assert bb.position() > 0;
-            writeBytes();
-            continue;
-        }
-        cr.throwException();
+            if (cr.isOverflow()) {
+                assert bb.position() > 0;
+                writeBytes();
+                continue;
+            }
+            cr.throwException();
         }
     }