Java - InputStreamReader Class



Introduction

The Java InputStreamReader class is a bridge from byte streams to character streams.It reads bytes and decodes them into characters using a specified charset.

Class declaration

Following is the declaration for Java.io.InputStreamReader class −

public class InputStreamReader
   extends Reader

Field

Following are the fields for Java.io.InputStreamReader class −

  • protected Object lock − This is the object used to synchronize operations on this stream.

Class constructors

Sr.No.Constructor & Description
1

InputStreamReader(InputStream in)

This creates an InputStreamReader that uses the default charset.

2

InputStreamReader(InputStream in, Charset cs)

This creates an InputStreamReader that uses the given charset.

3

InputStreamReader(InputStream in, CharsetDecoder dec)

This creates an InputStreamReader that uses the given charset decoder.

4

InputStreamReader(InputStream in, String charsetName)

This creates an InputStreamReader that uses the named charset.

Class methods

Sr.No.Method & Description
1void close()

This method closes the stream and releases any system resources associated with it.

2String getEncoding()

This method returns the name of the character encoding being used by this stream.

3int read()

This method reads a single character.

4int read(char[] cbuf, int offset, int length)

This method reads characters into a portion of an array.

5boolean ready()

This method tells whether this stream is ready to be read.

Methods inherited

This class inherits methods from the following classes −

  • Java.io.Reader
  • Java.io.Object

Example - Using close() with InputStreamReader (Automatic Closure with Try-With-Resources)

The following example shows the usage of Java InputStreamReader close() method.

InputStreamReaderDemo.java

package com.tutorialspoint;

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

public class InputStreamReaderDemo {
   public static void main(String[] args) {
      try (InputStreamReader reader = new InputStreamReader(new FileInputStream("example.txt"))) {
         int data;
         while ((data = reader.read()) != -1) { // Read character by character
            System.out.print((char) data);
         }
         // No need to manually close, try-with-resources handles it
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output(if example.txt contains "JavaProgramming")

Let us compile and run the above program, this will produce the following result−

JavaProgramming

Explanation

  • Uses InputStreamReader, which reads characters from a file.

  • Reads one character at a time using read().

  • Uses try-with-resources, which automatically calls close() at the end.

Example - Getting Default Encoding of InputStreamReader

The following example shows the usage of Java InputStreamReader getEncoding() method.

InputStreamReaderDemo.java

package com.tutorialspoint;

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

public class InputStreamReaderDemo {
   public static void main(String[] args) {
      try (InputStreamReader reader = new InputStreamReader(new FileInputStream("example.txt"))) {
         System.out.println("Encoding used: " + reader.getEncoding());
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output

Let us compile and run the above program, this will produce the following result−

Encoding used: UTF8

Explanation

  • Creates an InputStreamReader with default encoding.

  • Calls getEncoding() to print the encoding used.

  • The encoding depends on the JVM default (e.g., "UTF8" or "Cp1252" on Windows).

Example - Reading One Character at a Time

The following example shows the usage of Java InputStreamReader read() method.

InputStreamReaderDemo.java

package com.tutorialspoint;

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

public class InputStreamReaderDemo {
   public static void main(String[] args) {
      try (InputStreamReader reader = new InputStreamReader(new FileInputStream("example.txt"))) {
         int data;
         while ((data = reader.read()) != -1) { // Read character by character
            System.out.print((char) data); // Convert integer to character and print
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Output(if example.txt contains "Hello")

Let us compile and run the above program, this will produce the following result−

Hello

Explanation

  • Uses InputStreamReader to read text from "example.txt".

  • Calls read() to read one character at a time.

  • Converts the integer Unicode value into a character ((char) data).

  • Stops reading when read() returns -1 (EOF reached).