De streaming-klassen zijn hiërarchisch georganiseerd. De meest gebruikte invoerklassen zijn:
Reader
BufferedReader
InputStreamReader
FileReader
Writer
PrintWriter
FileWriter
De klassen Reader en Writer staan bovenaan in een overervingsboom en worden uitgebreid met een aantal op tekens gebaseerde klassen. Voor bestanden maken we gebruik van de klassen BufferedReader en PrintWriter voor het inlezen en schrijven van regels tekst. Voor invoer die niet uit een bestand afkomstig is (van het toetsenbord en van webpagina’s) maken we bovendien gebruik van InputStreamReader.
Programma’s die bestanden gebruiken moeten bovenaan java.io.* importeren.
Het woord ‘buffer’ geeft aan dat de software achter de schermen een flinke hoeveelheid gegevens van trage opslagmedia (zoals een cd-rom of de harde schijf) inleest en in het veel snellere RAM geheugen opslaat. Achtereenvolgende aanroepen van methoden, die een klein aantal gegevens van het opslagmedium moeten inlezen, kunnen die gegevens snel uit het RAM geheugen halen. Een buffer functioneert dus als een stootkussen tussen het opslagmedium en het programma.