在顶层有
Reader
和
Writer
两个抽象类。
Reader
和
Writer
中定义了
read()
和
write()
方法,它们被派生流类 重载
Reader
抽象类的定义
public abstract class Reader implements Readable , Closeable {//BIO ,读取一个有效的字符,返回值为 0 到 65535 的整数,如果到达流的末尾则返回 -1public int read () throws IOException//BIO, 读取字符存储到 char 数组中,返回读取的字符个数,流结束则返回 -1public int read ( char cbuf []) throws IOException// 关闭流,同时释放资源abstract public void close () throws IOException ;
Writer
抽象类的定义 :
public abstract class Writer implements Appendable , Closeable , Flushable {// 写出一个字符到字符流,要写的字符包含在给定整数值的 16 个低位; 16 个高位被忽略。public void write ( int c ) throws IOException// 将字符数组中的指定部分内容压入到字符流,从 off 开始共 len 个字符abstract public void write ( char cbuf [], int off , int len ) throwsIOException ;/ 关闭流,同时释放资源abstract public void close () throws IOException ;
相关的子类:
InputStreamReader
、
OutputStreamWriter
桥接流,用于自动实现字节流和字符流的转换
FileReader
、
FileWriter
文件流,用于实现针对文本文件的读写操作
CharArrayReader
、
CharArrayWriter
内存流,用于实现针对
char
数组的读写操作
PipedReader
、
PipedWriter
管道流,用于线程之间的通讯
FilterReader
、
FilterWriter
过滤流的父类
BufferedReader
、
BufferedWriter
缓存流,用于在流中添加缓冲区
StringReader
、
StringWriter
内存流,用于实现针对字符串的读写操作
一 字符流
Reader:
int read()
读取一个字符并以整数的形式返回
0-65535
,如果返回
-1
则已到输入流末尾
int read(char[] cbuf)
读取一系列字符并存储到一个数组中,返回实际读取的字符数,如果读到输入
流末尾则返回
-1
void close()
关闭输入流并释放内存资源
int read(char[] cbuf, int off, int len)
读取
len
个字符并存储到一个数组中,从
off
位置开始,返回实
际读取的字符数,如果读取到输入流末尾则返回
-1
long skip(long n)
跳过
n
个字符不读,返回实际跳过的字节数
二 字符流
Writer:
void write(int c)
将字符(
int
数组的低
8
位)压入到字符流中
void write(char[] cbuf, int off, int len)
将字符数组中的指定部分内容压入到字符流中,从
off
开始共
len
个字符
void write(String str)
将字符串中的内容压入到字符流中
void close()
关闭流并释放所占用的资源
void write(String str, int off, int len)
将字符串中的指定部分内容压入到字符流中,从下标
off
开始
共
len
个字符
void flush()
刷新缓冲区,将缓冲区中的数据全部送出到目标地,然后清空缓冲区
void write(char[] cbuf)
将字符数组中的所有数据压入到字符流中
一般来说:一次读写一个字符效率太低,可以引入
char[]
数组提高执行效率
小结 :
在学些
BIO
时记忆父类的方法,区分子类的实现不同
InputStream中的方法
read(byte[]):int
;
Reader
中方法
read(char[]):int
如果到达流末尾
则
-1
OutputStream中的方法
write(byte[],0,len):void
;
Writer
中的方法
write(char[],0,len)/write(String)
一般在使用中,如果读取数据使用字节流,则写出数据采用的也是字节流;不建议混用,除非引入
桥接流
文件流
FileInputStream("file-name") FileInputStream(File) FileNotFoundException
FileReader("file-name") FileReader(File) FileNotFoundException
FileOutputStream("file-name") FileOutputStream("file-name",true) 默认文件覆盖,如果
参数
true
表示追加
FileWriter("file-name") FileWriter("file-name",true)
一般不使用单字节或者单字符的操作方法,使用数组
注意:
try(){}
是推荐写法,否则应该使用
try{}finally{}
结构保证流的关闭
针对二进制文件不建议使用字符流,建议使用字节流进行操作,否则有可能拷贝文件出现问题:
如果针对文本文件则建议使用字符流,因为编码使用比较方便