流的分类
1.按流的流向分类
输入流和输出流
输入流是从其他地方(硬盘、外部存储、网络等)往内存中读取数据。
输出流是从内存往其他地方(硬盘、外部存储、网络等)写入数据。
输入和输出流的方向是相对于内存而言的
2.按流的传输单位分类
字节流和字符流
字节流是基于8位的字节作为操作的数据单元。
字符流是基于16位的字符作为操作的数据单元。
字符流可以看成特殊的字节流
3.按功能分
节点流和处理流
直接从数据源读/写数据的流,称为节点流。
对一个已经存在的流进行连接封装,通过封装后的流来实现数据读/写功能,即为处理流。
流的基类
1.InputStream
InputStream简介
InputSteam是字节输入流的抽象基类,本身不能创建实例来进行输入,
但是有丰富的子类去实现不同的功能,它类似于一个模板,所以它的方法将是所有输入流都可使用的方法
InputStream常用方法
a.从输入流中读取单个字节,返回所读取的字节数据,转化成为int类型
int read();
b.从输入流中最多读取字节数组b的长度个字节数据,并且保存在b中,返回值表示本次读取实际读取的字节数
int read(byte[] b);
c.从输入流中最多读取len个字节的数据,并存储在字节数组b中,并不是从数组的开头放入的,而是从off位置开始,返回实际读取的字节数
int read(byte[] b, int off, int len);
d.关闭此输入流并释放与此流关联的所有系统资源
void close();
e.跳过和丢弃此输入流中数据的 n 个字节,返回实际跳过的字节数
long skip(long n);
Reader
Reader简介
Reader是字符输入流的抽象基类,和InputStream的用法非常相似,
唯一的区别在于对字节的操作变成了对字符的操作
Reader常用方法
a.从输入流中读取单个字符,返回所读取的字符数据,转化为int类型
int read();
b.从输入流中最多读取字符数组c的长度个字符数据,并且保存在c中,返回值表示本次读取实际读取的字符数
int read(char[] c);
c.从输入流中最多读取len个字符的数据,并存储在字符数组c中,
并不是从数组的开头放入的,而是从off位置开始,返回实际读取的字符数
int read(char[] c, int off, int len);
e.关闭此输入流并释放与此流管理的所有系统资源
void close();
f.跳过输入流中的n个字符,返回实际跳过的字符数
long skip(long n);
OutputStream
OutputStream简介
OutputStream是所有字节输出流的抽象父类,和InputStream是对应的,它也有自己的一系列方法
OutputStream常用方法
a.将指定的字节输出到输出流中
void write(int c);
b.将字节数组中的数据输出到指定的输出流中
void write(byte[] b);
c. 将字节数组中的off位置开始,长度为len的字节输出到输出流中
void write(byte[] b, int off, int len);
Writer
Writer简介
Writer是字符输出流,和Reader是对应的,基本用法和OutputStream类似,但是因为字符流直接以字符作为操作单位,所以Writer相对于字节输出流还多了几个方法
Writer常用方法
a.将指定的字符输出到输出流中
void write(int c);
b.将字符数组中的数据输出到指定的输出流
void write(char[] c);
c.将字符数组中从off开始,长度为len的字符数据输出到输出流中
void write(char[] c, int off, int len);
d.将str字符串里包含的字符输出到指定的输出流中
void write(String str);
e. 将str字符串里从off位置开始,长度为len的字符输出到输出流中
void write(String str, int off, int len);
常用的流的实现类
RandomAccessFile类
主要功能是完成随机读写功能,可以读取指定位置的内容
构造方法:
public RandomAccessFile (File file,String mode)
public RandomAccessFile (String name,String mode)
第二个参数
文件的打开模式(mode):
“r” 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
“rw” 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
常用方法:
void seek(long pos)设置文件指针偏移量,在该位置准备开始读写。
long getFilePointer()获取此文件中的当前偏移量
long length()返回此文件的长度。
int skipBytes(int n)尝试跳过输入的 n 个字节并丢弃跳过的字节.返回实际跳过的字节数.
注意:
1.当一个文件可以用记事本打开并且正常显示,我们就可以用字符流来处理,也可以直接用字节流处理,其实字符流就是特殊的字节流
2.使用IO流切记需要关闭流,释放资源