Java streams provide a fundamental abstraction for flowing data. Streams allow filtering and formatting of primitive types, strings, and bytes. Common stream wrappers include data streams for primitive types/strings, buffered streams to optimize communication with a buffer, and print readers/writers for formatting strings and byte conversion. Streams are also used for inter-system communication through sockets and socket connections in distributed systems.