📜  Java IO-InputStreamReader(1)

📅  最后修改于: 2023-12-03 15:31:30.869000             🧑  作者: Mango

Java IO-InputStreamReader

在Java中,InputStreamReader是一个用于将字节流转换为字符流的Bridge流。

1. 概述

InputStreamReader根据指定的字符集,将InputStream中的字节转换为字符流。它可以将字节流转换为字符流,这类情况经常出现在(例如)从文件或网络中读取数据时。

2. 使用
2.1 创建InputStreamReader对象

使用InputStreamReader类,必须创建一个InputStreamReader对象,通常使用下面的构造函数来创建:

InputStreamReader isr = new InputStreamReader(InputStream in);
InputStreamReader isr = new InputStreamReader(InputStream in, String charsetName);

第一个构造函数将使用默认字符集将字节流转换为字符流,而第二个构造函数使用指定的字符集将字节流转换为字符流。

2.2 读取数据

一旦你创建了一个InputStreamReader对象,你可以用read()方法从InputStream中读取字符:

char singleChar = (char) isr.read();

如果需要读取多个字符,可以使用以下方法:

int numCharsRead;
char[] charBuffer = new char[4096];

while ((numCharsRead = isr.read(charBuffer)) > 0) {
    // process the characters read
}

charBuffer数组定义了读取字符的缓存区大小。

2.3 关闭InputStreamReader对象

与任何其它I/O类的对象一样,当不再需要InputStreamReader时,请记得关闭它,否则会有内存泄漏的可能。

isr.close();
3. 示例

以下示例使用InputStreamReader从标准输入读取字符,并将这些字符写入标准输出。

import java.io.*;

public class InputStreamReaderExample {

    public static void main(String[] args) throws IOException {

        InputStreamReader isr = new InputStreamReader(System.in);

        char[] charBuffer = new char[128];

        int numCharsRead;

        while ((numCharsRead = isr.read(charBuffer)) > 0) {

            System.out.print(new String(charBuffer, 0, numCharsRead));

            if (charBuffer[numCharsRead - 1] == '\n') {
                break;
            }
        }

        isr.close();
    }
}
4. 总结

InputStreamReader是一个将字节流转换为字符流的Bridge流。除非你知道自己在做什么,否则你应该始终使用指定字符集的构造函数,并确保在使用它完后关闭它。