The number of I/O stream classes in Java make it difficult for newbies to choose the right stream for a given application scenario. In his JavaBoutique.com article, Gurunath Kalamadi presents a very useful technique for conceptualizing the Java I/O stream classes, which you won't find it in any documentation.
He suggests separating the streams into two categories:
- "Boundary" streams: Boundary stream classes have basic low-level I/O routines to carry out the I/O (interacting with the underlying operating system for I/O operations, if necessary).
- "Intermediate" streams: Intermediate stream classes are "chained" to boundary stream classes, carrying out transformations on the data.