Java 菜鸟教程

Java 流程控制

Java 数组

Java 面向对象(I)

Java 面向对象(II)

Java 面向对象(III)

Java 异常处理

Java 列表(List)

Java Queue(队列)

Java Map集合

Java Set集合

Java 输入输出(I/O)

Java Reader/Writer

Java 其他主题

Java InputStreamReader 类

在本教程中,我们将借助示例学习Java InputStreamReader及其方法。

java.io包的InputStreamReader类可用于将字节数据转换为字符数据。

它继承了抽象类Reader。

InputStreamReader类是Java Reader的suclass。

InputStreamReader类与其他输入流一起工作。它也被称为字节流和字符流之间的桥梁。这是因为InputStreamReader从输入流中读取作为字符的字节。

例如,某些字符需要2个字节才能存储在存储器中。要读取此类数据,我们可以使用输入流读取器,该读取器一起读取2个字节并将其转换为相应的字符。

创建一个InputStreamReader

为了创建InputStreamReader,我们必须先导入java.io.InputStreamReader包。导入包后,就可以创建输入流阅读器。

//创建一个InputStream
FileInputStream file = new FileInputStream(String path);

//创建一个InputStreamReader
InputStreamReader input = new InputStreamReader(file);

在上面的示例中,我们创建了一个InputStreamReadernamed名为input和FileInputStreamnamed名为file。

在这里,文件中的数据使用某些默认字符编码存储。

但是,我们也可以在文件中指定字符编码的类型(UTF8UTF16)。

//创建一个InputStreamReader,指定字符编码
InputStreamReader input = new InputStreamReader(file, Charset cs);

在这里,我们使用了Charset类来指定文件中的字符编码。

InputStreamReader的方法

InputStreamReader类提供Reader类中存在的不同方法的实现。

read()方法

  • read() - 从阅读器读取单个字符

  • read(char[] array) - 从阅读器读取字符并将其存储在指定的数组中

  • read(char[] array, int start, int length) - 从读取器读取等于length的字符数,并start开始存储在指定的数组中

例如,假设我们有一个名为input.txt的文件,其中包含以下内容。

This is a line of text inside the file.

让我们尝试使用读取此文件InputStreamReader。

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

class Main {
  public static void main(String[] args) {

    //创建一个字符数组
    char[] array = new char[100];

    try {
      //创建一个FileInputStream
      FileInputStream file = new FileInputStream("input.txt");

      //创建一个InputStreamReader
      InputStreamReader input = new InputStreamReader(file);

      //从文件中读取字符
      input.read(array);
      System.out.println("流中的数据:");
      System.out.println(array);

      //关闭 reader
      input.close();
    }

    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

输出结果

流中的数据:
This is a line of text inside the file.

在上面的示例中,我们使用文件输入流创建了一个输入流读取器。输入流阅读器与文件input.txt链接。

 FileInputStream file = new FileInputStream("input.txt");
 InputStreamReader input = new InputStreamReader(file);

为了从文件中读取字符,我们使用了read()方法。

getEncoding()方法

getEncoding()方法可用于获取用于在输入流中存储数据的编码类型。例如,

import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.io.FileInputStream;

class Main {
  public static void main(String[] args) {

    try {
      //创建 FileInputStream
      FileInputStream file = new FileInputStream("input.txt");

      //使用默认编码创建一个InputStreamReader
      InputStreamReader input1 = new InputStreamReader(file);

      //创建指定编码的InputStreamReader
      InputStreamReader input2 = new InputStreamReader(file, Charset.forName("UTF8"));

      //返回输入流的字符编码
      System.out.println("input1的字符编码: " + input1.getEncoding());
      System.out.println("input2的字符编码: " + input2.getEncoding());

      //关闭 reader
      input1.close();
      input2.close();
    }

    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

输出结果

input1的字符编码: Cp1252
input2的字符编码: UTF8

在上面的示例中,我们创建了两个输入流阅读器,分别名为input1和input2。

  • input1没有指定字符编码。因此,getEncoding()方法返回默认字符编码的规范名称。

  • input2指定字符编码UTF8。因此,getEncoding()方法返回指定的字符编码。

注意:我们已经使用Charset.forName()方法指定字符编码的类型。

close()方法

要关闭输入流阅读器,我们可以使用close()方法。调用该close()方法后,我们将无法再使用读取器读取数据。

InputStreamReader的其他方法

方法描述
ready()检查流是否准备好被读取
mark()标记流中已读取数据的位置
reset()重置标记点