📜  Java InputStreamReader类

📅  最后修改于: 2020-09-26 14:48:08             🧑  作者: Mango

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

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

它扩展了抽象类Reader

The InputStreamReader class is a suclass of Java Reader.

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

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


创建一个InputStreamReader

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

// Creates an InputStream
FileInputStream file = new FileInputStream(String path);

// Creates an InputStreamReader
InputStreamReader input = new InputStreamReader(file);

在上面的示例中,我们创建了一个名为inputInputStreamReader以及一个名为fileFileInputStream

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

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

// Creates an InputStreamReader specifying the character encoding
InputStreamReader input = new InputStreamReader(file, Charset cs);

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


InputStreamReader的方法

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

read()方法

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

例如,假设我们有一个名为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) {

    // Creates an array of character
    char[] array = new char[100];

    try {
      // Creates a FileInputStream
      FileInputStream file = new FileInputStream("input.txt");

      // Creates an InputStreamReader
      InputStreamReader input = new InputStreamReader(file);

      // Reads characters from the file
      input.read(array);
      System.out.println("Data in the stream:");
      System.out.println(array);

      // Closes the reader
      input.close();
    }

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

输出

Data in the stream:
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 {
      // Creates a FileInputStream
      FileInputStream file = new FileInputStream("input.txt");

      // Creates an InputStreamReader with default encoding
      InputStreamReader input1 = new InputStreamReader(file);

      // Creates an InputStreamReader specifying the encoding
      InputStreamReader input2 = new InputStreamReader(file, Charset.forName("UTF8"));

      // Returns the character encoding of the input stream
      System.out.println("Character encoding of input1: " + input1.getEncoding());
      System.out.println("Character encoding of input2: " + input2.getEncoding());

      // Closes the reader
      input1.close();
      input2.close();
    }

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

输出

The character encoding of input1: Cp1252
The character encoding of input2: UTF8

在上面的示例中,我们创建了两个输入流读取器,分别名为input1input2

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

注意 :我们已经使用Charset.forName()方法来指定字符编码的类型。要了解更多信息,请访问Java Charset(Java官方文档)。


close()方法

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


InputStreamReader的其他方法
Method Description
ready() checks if the stream is ready to be read
mark() mark the position in stream up to which data has been read
reset() returns the control to the point in the stream where the mark was set

要了解更多信息,请访问Java InputStreamReader(官方Java文档)。