Java I/O uses two parallel hierarchies: byte streams (InputStream/OutputStream) for binary data and character streams (Reader/Writer) for text. Byte streams handle raw I/O (images, files, network). Character streams handle text with proper encoding (unicode, localization). Both types are fundamental to Java's I/O architecture.