I/O Streams in Java

Master console I/O, file I/O, InputStream, OutputStream, Reader, Writer, byte streams, character streams, and buffered streams for the OCP 21 exam.

Table of Contents

1. Streams Overview

Java I/O streams are used for reading and writing data. There are two main types: byte streams and character streams.

1.1 Stream Types

Type Base Classes Use Case
Byte Streams InputStream, OutputStream Binary data (images, files)
Character Streams Reader, Writer Text data

2. Byte Streams

2.1 FileInputStream and FileOutputStream

Example:
import java.io.*;

// Reading from file
try (FileInputStream fis = new FileInputStream("input.txt")) {
    int data;
    while ((data = fis.read()) != -1) {
        System.out.print((char) data);
    }
}

// Writing to file
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
    String text = "Hello World";
    fos.write(text.getBytes());
}

// Reading bytes into array
try (FileInputStream fis = new FileInputStream("input.txt")) {
    byte[] buffer = new byte[1024];
    int bytesRead = fis.read(buffer);
}

3. Character Streams

3.1 FileReader and FileWriter

Example:
import java.io.*;

// Reading text file
try (FileReader reader = new FileReader("input.txt")) {
    int data;
    while ((data = reader.read()) != -1) {
        System.out.print((char) data);
    }
}

// Writing text file
try (FileWriter writer = new FileWriter("output.txt")) {
    writer.write("Hello World");
}

// Reading into char array
try (FileReader reader = new FileReader("input.txt")) {
    char[] buffer = new char[1024];
    int charsRead = reader.read(buffer);
}

4. Buffered Streams

Buffered streams improve performance by reducing the number of I/O operations.

4.1 BufferedInputStream and BufferedOutputStream

Example:
import java.io.*;

// Buffered byte streams
try (BufferedInputStream bis = new BufferedInputStream(
        new FileInputStream("input.txt"))) {
    int data;
    while ((data = bis.read()) != -1) {
        System.out.print((char) data);
    }
}

try (BufferedOutputStream bos = new BufferedOutputStream(
        new FileOutputStream("output.txt"))) {
    bos.write("Hello".getBytes());
    bos.flush();  // Ensure data is written
}

4.2 BufferedReader and BufferedWriter

Example:
import java.io.*;

// Buffered character streams
try (BufferedReader br = new BufferedReader(
        new FileReader("input.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
}

try (BufferedWriter bw = new BufferedWriter(
        new FileWriter("output.txt"))) {
    bw.write("Line 1");
    bw.newLine();
    bw.write("Line 2");
    bw.flush();
}

5. Console I/O

5.1 System.in, System.out, System.err

Example:
import java.io.*;

// Reading from console
BufferedReader reader = new BufferedReader(
    new InputStreamReader(System.in));
String input = reader.readLine();

// Writing to console
System.out.println("Output");
System.err.println("Error");

// Using Scanner (easier)
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
int number = scanner.nextInt();

6. Exam Key Points

Critical Concepts for OCP 21 Exam:

  • Byte Streams: InputStream, OutputStream for binary data
  • Character Streams: Reader, Writer for text data
  • FileInputStream/FileOutputStream: Byte streams for files
  • FileReader/FileWriter: Character streams for files
  • Buffered Streams: Improve performance with buffering
  • BufferedReader.readLine(): Read line by line
  • BufferedWriter.newLine(): Write line separator
  • try-with-resources: Automatically closes streams
  • flush(): Ensures data is written immediately
  • System.in: InputStream for console input
  • System.out: PrintStream for console output
  • System.err: PrintStream for error output

Post a Comment

0 Comments