diff -r bc82981ff581 -r 70f819173479 jdk/src/share/classes/java/io/SequenceInputStream.java --- a/jdk/src/share/classes/java/io/SequenceInputStream.java Thu Mar 13 07:24:12 2014 +0400 +++ b/jdk/src/share/classes/java/io/SequenceInputStream.java Thu Mar 13 07:52:17 2014 +0400 @@ -135,7 +135,7 @@ * @since JDK1.1 */ public int available() throws IOException { - if(in == null) { + if (in == null) { return 0; // no way to signal EOF from available() } return in.available(); @@ -160,15 +160,14 @@ * @exception IOException if an I/O error occurs. */ public int read() throws IOException { - if (in == null) { - return -1; + while (in != null) { + int c = in.read(); + if (c != -1) { + return c; + } + nextStream(); } - int c = in.read(); - if (c == -1) { - nextStream(); - return read(); - } - return c; + return -1; } /** @@ -204,13 +203,14 @@ } else if (len == 0) { return 0; } - - int n = in.read(b, off, len); - if (n <= 0) { + do { + int n = in.read(b, off, len); + if (n > 0) { + return n; + } nextStream(); - return read(b, off, len); - } - return n; + } while (in != null); + return -1; } /**