目录
一、流的概念
概念:内存与存储设备之间传输数据的通道。
数据借助流传输。
二、流的分类
1.按方向
输入流(Input):将<存储设备>中的内容读入到<内存>中。
输出流(Output):将<内存>中的内容写入到<存储设备>中。
2.按单位:
字节流:以字节为单位,可以读写所有的数据。
字符流:以字符为单位,可以读写文本数据。
3.按功能:
节点流:具有实际传输数据的读写功能。
过滤流:在节点流的基础之上增强功能。
三、字节流
字节流的父类(抽象类)
InputStream:字节输入流
OutputStream:字节输出流
1、文件字节流
(1) FileInputStream:
public int read(byte[] b)
从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数,如果达到文件的尾部,则返回-1。
(2)FileOutputStream:
public void write(byte[] b)
一次写多个字节,将b数组中所有字节,写入输出流。
(3)完成复制文件
使用文件字节流实现文件的复制,先读取(FileInoutStream)再写入(FileOutputStream)。
2、字节缓冲流
缓冲流:BufferedInputStream / BufferedOutputStream
(1)提高IO效率,减少访问磁盘的次数;
(2)数据存储在缓冲区中,flush是将缓冲区的内容写入文件中。
(1)BufferedInputStream:
import java.io.BufferedInputStream;
import java.io.FileInputStream;
/**
* 使用字节缓冲流读取
* BufferedInputStream
*/
public class Demo04 {
public static void main(String[] args)throws Exception {
//1.创建BufferedInputStream
FileInputStream file = new FileInputStream("d:\\aaa.txt");
BufferedInputStream bufferedInputStream = new BufferedInputStream(file);
//2.读取
//方法一:
// int data = 0;
// while((data=bufferedInputStream.read())!=-1){
// System.out.println((char) data);
// }
//方法二:
byte[] buf = new byte[1024];
int count = 0;
while((count=bufferedInputStream.read(buf))!=-1){
System.out.println(new String(buf,0,count));
}
//3.关闭
bufferedInputStream.close();
}
}
(2)BufferedOutputStream:
3、对象流
对象流:ObjectOutputStream / ObjectInputStream
(1)增强了缓冲区功能
(2)增强了读写8种基本数据类型和字符串功能
(3)增强了读写对象的功能:
readObject() 从流中读取一个对象
writeObiect(Object obj) 向流中写入一个对象
使用流传输对象的过程称为序列化、反序列化。
(1)序列化:
(2)反序列化:
注意事项:
1. 序列化类必须实现Serializable接口;
2. 序列化类中的对象属性也要实现Serializable接口;
3. 写序列化版本号ID&#