IO流:可以把它理解为一种传输数据的管道;利用它可以来做 数据的读写,文件的上传、下载 ;传输的内容 先入先出。
数据源--->IO流--->目的地
流的分类
按操作单元分:
1.字节流:万能流,任何数据都可
2.字符流:仅限于纯文本内容
按流向分:
1.输入流
2.输出流
按功能分:
1. 节点流:可以真实做读入写出
2.功能流:增强节点流的功能
节点流
字节流(可多态)
InputStream(所有字节输入流的父类) OutputStream(所有字节输出流的父类)
FileInputStream 文件字节输入流
1.创建文件 2.创建输入流 3.读入 4.关闭
FileOutputStream 文件字节输出流
1.创建输出流 2.写入 3.刷出 3.关闭
字节流文件的copy
1.构建流
1)输入流 FileInputStream
2)输出流 FileOutputStream
2.读入写出 .read() .write()
3.刷出 .flush() 4.关闭(先打开的后关闭) .close()

字符流
Reader(所有字符输入流的父类) Writer(所有字符输出流的父类)
与上述字节流都类似,只不过类变了
功能流
1.Buffered缓冲流 :加节点流的读写效率
使用 :包裹节点流使用
字节缓冲流:BufferedInputStream BufferedOutputStream
eg:InputStream in=new BufferedInputStream(new InputStream("D:\\test.txt"))
字符缓冲流:(不可发生多态,有新增方法)
字符输入流:BufferedReader 增:StringeradLine() 一次性读一行数据,默认null
字符输出流:BufferedWriter 增:void newline() 换行
2.Data流|基本数据类型流(字节)
读写+保留原始数据类型(基本数据+字符串类型)
DataInputStream 增:readXxx()
DataOutputStream 增:WriterXxx() Xxx为数据类型
注意:
1.读入与写出顺序一致
2.读入时必须从文件读入
3.Object流(字节)
操作对象+各种数据类型
序列化:把数据对象转化为可传输内容
序列化输出:ObjectOutputStream 增:void writeObject(Object obj)
反序列化输入:ObjectInputStream 增:Object readObject()
先序列化后反序列化
注意:
1.读入与写出顺序一致
2.对象实现序列化需要接口 Serializable
3.成员被transient修饰的不能被序列化
4.成员被static修饰的不能被序列化
父类序列化,子类没有,子类可以继承父类的序列化内容;反之则不可
序列号:实现了序列化的类会自动生成序列号,成员变动序列号会自动更新
手动生成:1.实现接口
2.选中类名,Alt+Anter生成