InputStream

The InputStream class is an abstract class in java.io used for reading byte-based input. It serves as the superclass for all classes representing an input stream of bytes (e.g., FileInputStream, BufferedInputStream, etc.).

Commonly Used Methods

Simple Program: Reading Bytes from a File

Read content from a file using FileInputStream (a subclass of InputStream) and print the contents to the console.

import java.io.FileInputStream;
import java.io.IOException;

public class SimpleInputStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("sample.txt")) {
            int byteData;
            while ((byteData = fis.read()) != -1) {
                System.out.print((char) byteData); // casting byte to char
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Notes:

  • Make sure sample.txt exists in your project folder.
  • It reads byte-by-byte and prints each character.

Problem Statement:

LotusJavaPrince is debugging a production system. The server generates a log.txt file. They want to count the number of ERROR, WARNING, and INFO messages using InputStream. This should work with minimal memory usage—hence byte-level reading.

import java.io.FileInputStream;
import java.io.IOException;

public class LogAnalyzer {
    public static void main(String[] args) {
        StringBuilder logBuilder = new StringBuilder();
        int errorCount = 0;
        int warningCount = 0;
        int infoCount = 0;

        try (FileInputStream fis = new FileInputStream("log.txt")) {
            int byteData;
            while ((byteData = fis.read()) != -1) {
                char ch = (char) byteData;
                logBuilder.append(ch);

                // When a line ends, process it
                if (ch == '\n') {
                    String line = logBuilder.toString().toUpperCase();
                    if (line.contains("ERROR")) errorCount++;
                    if (line.contains("WARNING")) warningCount++;
                    if (line.contains("INFO")) infoCount++;
                    logBuilder.setLength(0); // clear for next line
                }
            }

            // Handle last line if not ending in '\n'
            if (logBuilder.length() > 0) {
                String line = logBuilder.toString().toUpperCase();
                if (line.contains("ERROR")) errorCount++;
                if (line.contains("WARNING")) warningCount++;
                if (line.contains("INFO")) infoCount++;
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Log Analysis Summary:");
        System.out.println("ERROR: " + errorCount);
        System.out.println("WARNING: " + warningCount);
        System.out.println("INFO: " + infoCount);
    }
}
Sample log.txt Content
INFO - Server started successfully.
WARNING - Disk space low.
ERROR - Unable to connect to database.
INFO - Retry succeeded.
WARNING - High memory usage.
Output
Log Analysis Summary:
ERROR: 1
WARNING: 2
INFO: 2

InputStream provides low-level byte input.

  • Subclasses like FileInputStream extend its use for file handling.
  • You can read byte-by-byte, or into byte arrays.
  • It’s useful for efficient I/O, especially with large files.
Scroll to Top