一、Reader :用于读取字符流的抽象类。 子类必须实现的唯一方法是read(char [],int,int)和close()。 然而,大多数子类将覆盖这里定义的一些方法,以便提供更高的效率,附加的功能或两者。
常用函数:
- close() 关闭流并释放与之相关联的任何系统资源。
- read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
已知子类:
1.BufferedReader : 包装类,使用缓冲技术高效的读取数据。
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。 可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。通常,由读取器做出的每个读取请求将引起对底层字符或字节流的相应读取请求。 因此,建议将BufferedReader包装在其read()操作可能耗时的读取器上,例如FileReaders和InputStreamReaders。
构造函数:BufferedReader(Reader in, int sz)
常用函数:
1. read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
2. readLine() 读一行文字。
2.InputStreamReader :可以实现字节流转字符流:它读取字节,并使用指定的charset
将其解码为字符。
构造函数:public InputStreamReader(InputStream in, String charsetName)
常用函数:read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
已知子类:
3.FileReader
构造函数:FileReader(File file) 创建一个新的FileReader ,给出 File读取。
常用函数: read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
4.CharArrayReader:该类实现了一个字符缓冲区,可以用作字符输入流。
构造函数:CharArrayReader(char[] buf, int offset, int length)
常用函数:read(char[] b, int off, int len) 将字符读入数组的一部分。
5.FilterReader :用于读取过滤后的字符流的抽象类。
抽象类FilterReader本身提供了将所有请求传递给包含的流的默认方法。
已知子类:
6.PushbackReader :一个字符流读取器,允许将字符推回到流中。
构造函数:PushbackReader(Reader in, int size)
常用函数:unread(char[] cbuf, int off, int len) 通过将一部分字符复制到推回缓冲区的前端来推回。
7.PipedReader :管道流
PipedReader 必须和 PipedWriter 一起使用,PipedWriter 写数据 PipedReader 读取写入的数据。类似管道一般,从一端发送 数据,另外一端接收数据。
构造函数: PipedReader(PipedWriter src, int pipeSize)
常用函数:
1. connect(PipedWriter src) :使这个管道读取器连接到管道写入器 src 。
2. read(char[] cbuf, int off, int len) :从这个管道数据流读取最多 len字符数组。 (没有数据的情况下此方法会阻塞)
8.StringReader :字符串流
构造函数: public StringReader(String s)
常用函数:read(char[] cbuf, int off, int len)
9.LineNumberReader:缓冲字符输入流,跟踪行号。
构造函数: LineNumberReader(Reader in)
常用函数:
1.readLine() 读取一行数据
2.read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
3.getLineNumber() 获取当前行号。
4.setLineNumber(int lineNumber) 设置当前行号。
使用示例:
//FileReader 函数使用示例
public static String fileReaderTest(String path) {
File file = new File(path);
if (!file.exists()) {
return null;
}
FileReader fileReader=null;
try {
fileReader = new FileReader(file);
char[] tempBuff = new char[1024];
StringBuilder stringBuilder=new StringBuilder();
int len=0;
while ((len=fileReader.read(tempBuff))!=-1) {
stringBuilder.append(new String(tempBuff,0,len));
}
return stringBuilder.toString();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}finally {
if(fileReader!=null){
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return "";
}
//FileReader增加缓冲技术的用法,使用BufferedWriter包装类
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static String BufferedReaderTest(String path) {
File file=new File(path);
if(!file.exists()){
return null;
}
//try 里面申请的资源,try执行完以后,自动调用close方法
try (BufferedReader bufferedReader=new BufferedReader(new FileReader(file))){
String data="";
StringBuilder stringBuilder=new StringBuilder();
while ((data=bufferedReader.readLine())!=null){
stringBuilder.append(data);
}
return stringBuilder.toString();
}catch (IOException ex){}
return "";
}
//字节流转字符流
public static String OutputStreamReaderTest(InputStream in){
InputStreamReader outputStreamReader=new InputStreamReader(in);
CharBuffer charBuffer= CharBuffer.allocate(1024);
StringBuilder stringBuilder=new StringBuilder();
int len=0;
try {
while ((len=outputStreamReader.read(charBuffer))!=-1){
Log.e(TAG,"OutputStreamReaderTest==>"+charBuffer.toString());
stringBuilder.append(charBuffer.toString());
char[] s=charBuffer.array();
}
return stringBuilder.toString();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(outputStreamReader!=null)
try {
outputStreamReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return "";
}