My notes from O'Reilly book Java I/O 2nd Edition by Elliotte Rusty Harold.
A stream is on ordered sequence of bytes of indeterminate length. An input stream moves bytes of data into the Java program while output stream does opposite. Input streams read bytes and output streams write bytes.
Text in Java is primarily composed of the char primitive data type, char arrays, and Strings (stored as arrays of chars internally).
Note: You must understand bytes to really grasp how input/output streams work. You need to understand chars to really grasp understand how readers and writers work.