- Java performs I/O through streams which are abstractions that produce or consume data and are linked to physical devices.
- There are two types of streams in Java: byte streams which handle input/output of bytes and character streams which handle input/output of characters more efficiently.
- The main classes for byte streams are InputStream, OutputStream and their subclasses like FileInputStream and FileOutputStream. The main classes for character streams are Reader and Writer.
- The predefined streams System.in, System.out and System.err represent standard input, standard output and standard error streams in Java.