Index: modules/luni/src/main/java/java/io/InputStreamReader.java =================================================================== --- modules/luni/src/main/java/java/io/InputStreamReader.java (revision 396240) +++ modules/luni/src/main/java/java/io/InputStreamReader.java (working copy) @@ -430,8 +430,18 @@ return; } bytes.limit(read); - boolean endOfInput = read < BUFFER_SIZE; + boolean endOfInput = in.available() == 0; CoderResult result = decoder.decode(bytes, chars, endOfInput); + while (result.isUnderflow() && !endOfInput) { + if(bytes.position()+bytes.arrayOffset() >= bytes.capacity()) + break; + read = in.read(bytes.array(), bytes.position()+bytes.arrayOffset(), 1); + bytes.limit(bytes.limit()+read); + if (read == -1) { + endOfInput = true; + } + result = decoder.decode(bytes, chars, endOfInput); + } if (result.isError()) { throw new IOException(result.toString()); }