A readable source of bytes.
Most clients will use input streams that read data from the file system (FileInputStream), the network (getInputStream()/getInputStream()), or from an in-memory byte array (ByteArrayInputStream).
Use InputStreamReader to adapt a byte stream like this one into a character stream.
Most clients should wrap their input stream with BufferedInputStream. Callers that do only bulk reads may omit buffering.
Some implementations support marking a position in the input stream and resetting back to this position later. Implementations that don't return false from markSupported() and throw an IOException when reset() is called.