The Reader
class is part of Java’s character-based I/O system, introduced to handle text data (as opposed to InputStream
which handles raw bytes). Let’s go over the key subclasses and their purposes.
📘 Reader
Overview
Reader
is an abstract class injava.io
for reading streams of characters.- It is part of the character I/O hierarchy, introduced to work with Unicode text in a more natural way than byte streams.
🔽 Common Subclasses of Reader
Subclass | Description |
---|---|
BufferedReader | Buffers characters for efficient reading, supports readLine() . |
InputStreamReader | Converts bytes from an InputStream into characters using a charset. |
FileReader | A convenience subclass of InputStreamReader for reading from files (uses default charset). |
CharArrayReader | Reads characters from a character array. |
StringReader | Reads characters from a String . |
PipedReader | Used with PipedWriter for inter-thread communication. |
FilterReader | Abstract class for decorating Reader objects, base for custom filtering. |
PushbackReader | Allows one character to be “pushed back” (unread), useful for parsers. |
✅ Quick Examples
1. BufferedReader
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
2. InputStreamReader
InputStreamReader reader = new InputStreamReader(new FileInputStream("file.txt"), "UTF-8");
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
reader.close();
3. CharArrayReader
char[] chars = {'J', 'a', 'v', 'a'};
CharArrayReader reader = new CharArrayReader(chars);
int c;
while ((c = reader.read()) != -1) {
System.out.print((char) c);
}
reader.close();
4. StringReader
StringReader reader = new StringReader("Hello Reader");
int ch;
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
reader.close();
5. PushbackReader
PushbackReader reader = new PushbackReader(new StringReader("abc"));
int c = reader.read();
if (c != 'a') {
reader.unread(c);
}
// Continue processing
reader.close();
🧵 Summary Table
Reader Subclass | Purpose |
---|---|
BufferedReader | Efficient reading, supports readLine() |
InputStreamReader | Bridge from byte to character streams |
FileReader | Reads characters from files |
CharArrayReader | Reads from a character array |
StringReader | Reads from a string |
PipedReader | Inter-thread communication |
FilterReader | Decorator base class |
PushbackReader | Allows unread of characters (parser use) |