Java Programmingprogrammingio streamsjava standard library

Java Standard Library: Input/Output Streams

By Swann
Picture of the author
Published on
Java Standard Library Input/Output Streams illustration


Handling data, whether it's reading from or writing to a data source, is a pivotal aspect of programming. In Java, the Standard Library offers a potent set of tools to manage Input/Output (I/O) operations through various streams.

The Essence of Streams in Java

What is a Stream?

In Java, a stream represents a sequence of data. There are two main types of streams:

  • InputStream: Used to read data from a source.
  • OutputStream: Used to write data to a destination.

These streams facilitate the movement of data between a data source/sink (like a file or network socket) and a Java program.

Byte Streams and Character Streams

  • Byte Streams: Handle I/O of bytes and are used to perform input and output of 8-bit bytes.
  • Character Streams: Handle I/O of characters and use Unicode, therefore, can be used to read and write data in internationalized characters.

Exploring Java's I/O Stream Classes

FileInputStream and FileOutputStream

FileInputStream and FileOutputStream are used for reading from and writing to a file, respectively.

FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt");

DataInputStream and DataOutputStream

These are used for handling primitive data types (like int, float) more easily.

DataInputStream dis = new DataInputStream(new FileInputStream("data.txt"));
DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt"));

InputStreamReader and OutputStreamWriter

Used for converting byte streams to character streams.

InputStreamReader isr = new InputStreamReader(new FileInputStream("input.txt"));
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("output.txt"));

Reading and Writing with Streams

Reading from a File

try (FileInputStream fis = new FileInputStream("input.txt")) {
    int i;
    while ((i = != -1) {
        System.out.print((char) i);
} catch (IOException e) {

Writing to a File

try (FileOutputStream fos = new FileOutputStream("output.txt")) {
    String data = "Hello, Java I/O!";
    byte[] dataArray = data.getBytes();  // Converting string into byte array
} catch (IOException e) {

Buffering in Java I/O

Buffered streams (BufferedInputStream, BufferedOutputStream, BufferedReader, and BufferedWriter) are used to buffer data into a memory area, reducing the number of I/O operations.

try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
    bw.write("Buffered I/O in Java");
} catch (IOException e) {


The Java Standard Library provides a comprehensive set of I/O stream classes to efficiently manage data flow in applications. Understanding these streams and how to manipulate them is crucial in handling file I/O, network communications, and inter-process communications effectively and efficiently.

Additional Resources

Stay Tuned

Want to become a Next.js pro?
The best articles, links and news related to web development delivered once a week to your inbox.