一、简述
Reader和Writer是专门用于读写字符流的抽象类。
Writer和Reader有许多子类,且子类肯定重写了父类的write或者read的方法。
字节流处理单元为1个字节, 操作字节和字节数组。
与字节流不同的是,字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串。
字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。
所以可以通过使用Reader和Writer类向使用其他类型的流以及字符串进行输入和输出。
二、转换流
想要通过Reader和Writer对流进行输入输出,必定需要实现两种流的转换。
InputStreamReader:将字节输入流转换成字符输入流。
OutputStreamWriter:将字节输出流转换成字符输出流。
字符,首先要考虑的就是编码问题,所以,转换流有个重要的功能就是能设置编码,构造函数第二个参数传入对应编码。new OutputStreamWriter(out,”utf-8”)
三、字符流对象
1.BufferedReader 和 BufferedWriter
可以按行读写的缓冲输入输出流
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class BufferedReaderDemo {
public static void main(String[] args) {
InputStreamReader isr = null;
OutputStreamWriter osr = null;
BufferedReader br = null;
BufferedWriter bw = null;
try {
File bwtxt = new File("."+File.separator+"bw.txt");
if(!bwtxt.exists())
bwtxt.createNewFile();
File brtxt = new File("."+File.separator+"bw.txt");
if(!brtxt.exists())
brtxt.createNewFile();
osr = new OutputStreamWriter(new FileOutputStream(bwtxt),"utf-8");//设置编码
isr = new InputStreamReader(new FileInputStream(brtxt),"utf-8");
bw = new BufferedWriter(osr);
bw.write("哈哈哈哈哈哈 22222");//写入字符串
bw.newLine();//根据对应操作平台,插入换行符
bw.write("啊啊啊啊啊啊啊\n啊啊啊啊啊啊啊啊啊啊啊啊\n啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊");
bw.flush();//刷新流
br = new BufferedReader(isr);
int i=0;
while(br.read()!=-1){
System.out.println(br.readLine());//读取一行,没有数据为null
i++;
}
isr.close();
osr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.CharArrayWriter和CharArrayReader
CharArrayReader的作用就是把字符数组作为源读取
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.util.Arrays;
public class CharArrayReaderDemo {
public static void main(String[] args) {
try {
CharArrayWriter caw = new CharArrayWriter();
caw.write("123哈啊哈哈123");
CharArrayReader car = new CharArrayReader(caw.toCharArray());
char[] cbuf = new char[100];
car.read(cbuf);
System.out.println(Arrays.toString(cbuf));
} catch (IOException e) {
e.printStackTrace();
}
}
}