InputStreamReader和BufferedReader用法及实例讲解
在Java中,读取文件或者网络数据时,我们通常会用到InputStreamReader和BufferedReader这两个类。InputStreamReader是将字节流转换成字符流,而BufferedReader则是为了加速读取字符流而存在的。下面我们将逐步讲解这两个类的用法及实例讲解。
InputStreamReader的用法
InputStreamReader是字节流通往字符流的桥梁,将字节流(binary stream)转换成字符流(character stream),并使用指定的编码(charset)将字节流解码成字符流。因为InputStreamReader是字符读取的缓冲区,因此在创建InputStreamReader对象时需要传递InputStream对象,并且需要指定编码方式,例如:
InputStream inputStream = new FileInputStream(new File("data.txt")); // 打开文件流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); // 以UTF-8编码方式读取文件
在上述代码中,我们打开了一个文件流,并经过InputStreamReader将其转换成了字符流。需要注意的是,InputStreamReader构造器第二个参数的编码方式需要根据实际情况进行指定,对于不同国家的文字编码,需要使用相应的编码方式。
在InputStreamReader中,我们可以使用read()方法来读取数据,该方法会从InputStreamReader中读取数据,并返回读到的字符的Unicode码值。需要注意的是,该方法返回-1,表示已经读取完所有数据。示例如下:
int ch = inputStream.read();
while(ch != -1) {
System.out.print((char) ch);
ch = inputStream.read();
}
inputStream.close(); # 确保在读取完成后关闭文件流
在这段代码中,我们使用while循环来重复读取文件中的数据,直到读取完所有数据为止。
BufferedReader的用法
由于InputStreamReader对于每个字符都做了转换,因此它的效率相对较慢。为了解决这个问题,我们通常会使用BufferedReader来加速读取字符流。BufferedReader缓冲了字符,使得能够一次读取大量的字符,从而提高了效率。使用BufferedReader的方式如下:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String line;
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
在这段代码中,我们首先创建了一个InputStreamReader对象,使用UTF-8编码来读取数据,然后我们又创建了一个BufferedReader对象,并且将InputStreamReader传入其中。最后利用BufferedReader的readLine()方法来读取一行数据。由于BufferedReader继承自Reader类,因此也可以使用read()方法来逐个字符读取。
值得注意的是,BufferedReader还提供了一个mark()方法与reset()方法,前者表示标记当前位置,后者表示将位置重置到最近的标记位置。示例如下:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
bufferedReader.mark(100); # 设置标记位置为100个字符之后
System.out.println(bufferedReader.readLine());
bufferedReader.reset(); # 重新回到标记位置,重复读取
System.out.println(bufferedReader.readLine());
bufferedReader.close();
在上述代码中,我们调用了mark()方法来标记当前位置,并将标记位置设为100个字符之后。然后我们读取了一行数据,并通过reset()方法将位置重置到标记位置,从而重复读取一行数据。
示例
下面我们通过一个完整的实例来演示InputStreamReader和BufferedReader的用法。在这个实例中,我们首先创建一个example.txt的文本文件,包含了一些文本内容,然后通过InputStreamReader将该文件转换成字符流,最后利用BufferedReader按行读取其中的文本内容,并输出到控制台中。
import java.io.*;
public class Main {
public static void main(String[] args) {
File file = new File("example.txt");
try {
FileInputStream fileInputStream = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
inputStreamReader.close();
fileInputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这段实例代码中,我们首先创建一个File对象,该对象指向一个example.txt文件。然后我们利用FileInputStream、InputStreamReader和BufferedReader分别将该文件转换为字符流,并使用BufferedReader的readLine()方法来按行读取其中的文本内容,并输出到控制台中。最后需要调用close()方法关闭所有的流。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:InputStreamReader和BufferedReader用法及实例讲解 - Python技术站