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) |