1.出现的原因:
- 需要有一个东西来将数据写入文件,或者将文件中的数据获取使用
2.解释IO流
- 全称:input output Stream --输入输出流
- 数据的流动形态与水流相似,故称为io流
- 为什么有输入输出流?
- 参照物:内存
- 输入流:其他存储介质数据到内存
- 输出流:内存到其他存储介质数据
- 其他存储介质:硬盘,u盘,光盘,网盘等等
3.Java提供的类:
- 输入输出流
- 输入流:inputStream和Reader
- 输出流:outputString和Writer
- 数据类类型
- 字节流【按字节处理数据】:InputStream,outputStream
- 处理:图片,声音,视频等
- 字符流【按字符处理数据】:Reader,Writer
- 处理:文本
- 包装流【缓冲】:Buffered+对应的流
- 转换流:InputStreamReader,OutputStreamWriter
- 打印流:PrintWriter
- 字节流【按字节处理数据】:InputStream,outputStream
4.字节流的输入和输出
-
1)输入:InputStream 抽象类 java.io
- 所有字节输入流的超类
- FileInputStream:文件输入流,文件资源的读取,主要读取图片等原始字节字样
- 用法:普通的类,给定构造方法,没有静态方法,创建对象调用方法
- 使用步骤:
- 1.创建流对象
- 2.定义缓冲数组--指定每次读取多少字节,不指定,每次读取一个字节
- 3.读取数据--使用循环
- 4.处理数据
- 5.关闭流
- 键盘输入的操作--使用输入流模拟Scanner
-
2)输出:OutputStream 抽象类
- 含义:将数据以字节的方式发送出去
- 子类:FileOutputStream
- FileOutputStream:将资源写入文件
5.字符流的输入输出
- 用于文本的数据处理
- 输入流:
- Reader:读取字符 抽象类 子类:FileReader
- FileReader类:读取文本文件数据
- 输出流:
- Writer:写出字符流 抽象类 子类:FileWriter
- FileWriter:文本的写出
6.包装流-缓冲流
- 建立缓冲区,以便于提高续写速度
- 类:BufferedWriter,BufferedReader,BufferedInputStream,BufferedOutputStream
- 总结:加了缓冲区之后除了ufferedReader类,其他的操作基本没有变化
7.转换流
- InputStreamReader,OutputStreamWriter
- 字节流转化为字符流,进行高效方便操作
8.对象流----序列化
- 序列化:格式化----按照一定格式规范进行存储,需要统一标识
- 存储的对象对应的类必须实现序列化接口----java.io.Serializable
- 提供了两个类:ObjectInputStream,ObjectOutputStream
9.文件存储数据
- 虽然解决了持久化存储数据的问题,但是读取数据不方便,筛选数据麻烦
- 文件存储数据不安全