1.IO分类
概念:数据的读入写出,文件的上传下载
流的概念:一连串流动的数据,以先入先出的方式进行传输----流就是管道
数据源:数据来源 目的地:数据流向的位置
数据源-----io流-----目的地
流的几种分类: 流之间的分类是相辅相成的
按操作单元分:
1.字节流 :万能流
2.字符流:纯文本内容
按流向分:以程序为中心
1.输入流
2.输出流
按功能分:
1.节点流 :真实做到读入写出的
2.功能流:增强节点流的功能,提高节点流的性能
java.io包
InputStream 字节流中的最上层父类
文件流:FileInputStream 文件字节输入流
操作文件 数据源为文件 使用文件字节输入流
字符数组流:ByteArrayInputStream 字符数组输入流
操作字节数组 数据源是字节输入 使用字节数组输入流
2.字节流输出流
OutputStream 字节流输出流
FileOutputStream 文件字节输出流 -> 节点流 目的地为文件
ByteArrayOutputStream 字节数组输出流 -> 节点流 目的地为字节数组
注意:在输出流写出时,如果目的地文件不存在,系统会自动创建目的地文件,如果目的地文件所在路径不存在,则抛出异常java.io.FileNotFoundException:(系统找不到指定的路径。)
四步走: 1.构建流:指定目的地
输入流/输出流
2.读入写出
3.刷出:
4.关闭:(后打开的先关闭)
3.字节流实现文件拷贝
完整思路:
数据源---->输入流--->程序--->输出流--->目的地
四步骤:如上
字符流(纯文本数据)
Reader 字符输入流
FileReader 文件字符输入流 ----->节点流
Writer 字符输出流
FileWriter 文件字符输出流 ----->节点流
4.功能流
使用:包裹节点流使用
缓冲流:Buffered 加快节点流的读写效率
字节输入缓冲流 BufferInputStream
字节输出缓冲流 BufferOutputStream
无新增方法,不可以发生多态
字符缓冲流
5.字符流缓冲流(功能流)
字符输入缓冲流 BufferedReader
新增功能:String readLine()读一行文字
字符输出缓冲流 Bufferwriter
新增功能:void newLine() 写一个行分隔符
6.Data流
Data流 | 基本数据类型流:是字节流的功能流
DataInputStream Data输入流
新增功能:readXxx()
DataOutputStream Data输出流
新增功能:writeXxx()
注意:1.读入写出的顺序保持一致 2.读入数据的时候必须从源文件中读入
2.读入数据的时候必须从源文件中读入否则抛出异常 java.io.EOFException
7.Object 流
对象流|引用数据类型流
ObjectInputStream 反序列化输入流
新增方法 Object readObject() 从ObjectInputStream中读取一个对象
ObjectOutputStream 序列化输出流
新增方法 void writeObject(Object obj) 将指定的对象写入ObjectOutputStream。
序列化:将对象数据转化为可存储或者可传输的状态的过程
不是所有类型的数据都能序列化 java.io.Serializable
如果写出的对象类型没有实现序列化的接口,会遇到运行时异常 java.io.NotSerializableException
序列化与反序列化顺序保持一致
不是所有的属性都需要序列化 transient
static的成员不会被序列化
如果父类实现了类序列化接口则:子类所有内容都可以进行序列化