Reader字符输入流

Reader字符输入流

Reader (抽象类)
    ├── InputStreamReader
    │       └── FileReader
    ├── BufferedReader
    ├── CharArrayReader
    ├── PipedReader
    ├── FilterReader
    │       └── PushbackReader
    └── StringReader

Reader 是 Java 中用于读取字符数据的抽象类,它是所有字符输入流的基类。与 InputStream(字节输入流)不同,Reader 是以字符为单位读取数据的,适用于处理文本数据

常用方法

  1. int read()

    • 作用: 从输入流中读取一个字符

    • 返回值: 返回读取的字符(0 到 65535 之间的整数)。如果到达流的末尾,则返回 -1

      Reader reader = new FileReader("example.txt");
      int data = reader.read(); // 读取一个字符
      while (data != -1) {
          System.out.print((char) data); // 将字符打印到控制台
          data = reader.read(); // 继续读取下一个字符
      }
      reader.close();
      
  2. int read(char[] cbuf)

    • 作用: 从输入流中读取一定数量的字符,并将其存储到字符数组 cbuf 中

    • 返回值: 返回实际读取的字符数。如果到达流的末尾,则返回 -1

      Reader reader = new FileReader("example.txt");
      char[] buffer = new char[1024]; // 创建一个缓冲区
      int charsRead = reader.read(buffer); // 读取数据到缓冲区
      while (charsRead != -1) {
          System.out.print(new String(buffer, 0, charsRead)); // 处理读取的数据
          charsRead = reader.read(buffer); // 继续读取
      }
      reader.close();
      

常用实现类

  1. FileReader: 用于从文件中读取字符数据

    import java.io.FileReader;
    import java.io.IOException;
    import java.io.Reader;
    
    public class ReaderExample {
        public static void main(String[] args) {
            try (Reader reader = new FileReader("example.txt")) {
                char[] buffer = new char[1024];
                int charsRead;
                while ((charsRead = reader.read(buffer)) != -1) {
                    System.out.print(new String(buffer, 0, charsRead)); // 输出读取的数据
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  2. BufferedReader: 提供缓冲功能,提高读取效率

    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.Reader;
    
    public class BufferedReaderExample {
        public static void main(String[] args) {
            try (Reader reader = new BufferedReader(new FileReader("example.txt"))) {
                char[] buffer = new char[1024];
                int charsRead;
                while ((charsRead = reader.read(buffer)) != -1) {
                    System.out.print(new String(buffer, 0, charsRead)); // 输出读取的数据
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  3. InputStreamReader: 将字节流转换为字符流(可以指定字符编码)

    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.nio.charset.StandardCharsets;
    
    public class InputStreamReaderExample {
        public static void main(String[] args) {
            try (Reader reader = new InputStreamReader(new FileInputStream("example.txt"), StandardCharsets.UTF_8)) {
                char[] buffer = new char[1024];
                int charsRead;
                while ((charsRead = reader.read(buffer)) != -1) {
                    System.out.print(new String(buffer, 0, charsRead)); // 输出读取的数据
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
posted @ 2025-03-17 21:00  QAQ001  阅读(32)  评论(0)    收藏  举报