@ Override public synchronized int read ( ) throws IOException { // Use local refs since buf and in may be invalidated by an // unsynchronized close() byte [ ] localBuf = buf ; final InputStream localIn = in ; if ( localBuf == null || localIn == null ) { throw new IOException ( "Stream is closed" ) ; } /* Are there buffered bytes available? */ if ( pos >= count && fillbuf ( localIn , localBuf ) == - 1 ) { return - 1 ; /* no, fill buffer */ } // localBuf may have been invalidated by fillbuf if ( localBuf != buf ) { localBuf = buf ; if ( localBuf == null ) { throw new IOException ( "Stream is closed" ) ; } } /* Did filling the buffer fail with -1 (EOF)? */ final int mask = 0xFF ; if ( count - pos > 0 ) { return localBuf [ pos ++ ] & mask ; } return - 1 ; }
Reads a single byte from this stream and returns it as an integer in the range from 0 to 255 . Returns - 1 if the end of the source string has been reached . If the internal buffer does not contain any available bytes then it is filled from the source stream and the first byte is returned .