返回
输入输出与字符流
后端
2023-12-27 14:09:16
当然,以下是由我利用AI螺旋创作器创作的文章:
之前我们主要围绕File 类,及字节流的两个抽象类InputStream / OutputStream和它们的子类的概念及使用方法做了基本的讲解,从现在开始,我们将开始介绍字符流相关的内容。
字符流
字符流是与字节流相对应的一种流,它以字符为单位进行读写操作。字符流也分为输入流和输出流,分别用Reader和Writer表示。
Reader
Reader是字符输入流的抽象类,它定义了从字符流中读取数据的基本方法。Reader有许多子类,常用的有FileReader和BufferedReader。
- FileReader :FileReader是从文件中读取字符的流。它继承自Reader类,并实现了FileReader类。FileReader类构造函数接收一个字符串,该字符串表示要打开的文件名。
- BufferedReader :BufferedReader是一个带缓冲的字符输入流。它继承自Reader类,并实现了BufferedReader类。BufferedReader类构造函数接收一个Reader对象,该Reader对象表示要缓冲的字符输入流。BufferedReader提供了一些方法来方便地读取字符数据,如readLine()方法。
Writer
Writer是字符输出流的抽象类,它定义了向字符流中写入数据的基本方法。Writer有许多子类,常用的有FileWriter和BufferedWriter。
- FileWriter :FileWriter是向文件中写入字符的流。它继承自Writer类,并实现了FileWriter类。FileWriter类构造函数接收一个字符串,该字符串表示要打开的文件名。
- BufferedWriter :BufferedWriter是一个带缓冲的字符输出流。它继承自Writer类,并实现了BufferedWriter类。BufferedWriter类构造函数接收一个Writer对象,该Writer对象表示要缓冲的字符输出流。BufferedWriter提供了一些方法来方便地写入字符数据,如write()方法。
编码和解码
字符流的编码和解码过程非常重要。编码是指将字符转换为字节的过程,解码是指将字节转换为字符的过程。编码和解码过程通常使用某种字符集来进行。字符集定义了字符与字节之间的对应关系。常用的字符集有UTF-8、GBK和GB2312。
在Java中,可以使用以下方法来完成字符流的编码和解码:
- String.getBytes() :将字符串转换为字节数组。
- new String(byte[]) :将字节数组转换为字符串。
- Charset.encode() :将字符串转换为字节数组。
- Charset.decode() :将字节数组转换为字符串。
示例
以下是一个使用字符流读取和写入文件的示例:
// FileReader示例
FileReader reader = new FileReader("input.txt");
int ch = reader.read();
while (ch != -1) {
System.out.print((char) ch);
ch = reader.read();
}
reader.close();
// FileWriter示例
FileWriter writer = new FileWriter("output.txt");
writer.write("Hello world!");
writer.close();
// BufferedReader示例
BufferedReader bufferedReader = new BufferedReader(new FileReader("input.txt"));
String line = bufferedReader.readLine();
while (line != null) {
System.out.println(line);
line = bufferedReader.readLine();
}
bufferedReader.close();
// BufferedWriter示例
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("output.txt"));
bufferedWriter.write("Hello world!");
bufferedWriter.newLine();
bufferedWriter.write("This is a new line.");
bufferedWriter.close();