Reads a byte of data. This method will block until enough input is available. Simply calls the read method. MUST be overridden if the read method is not overridden; may be overridden otherwise.
Return
the byte read, or -1 if end of input is reached
if an I/O error has occurred