- 流
- I/O流:输入输出流(Input/Output)
- 输出流:针对程序来说,把数据从程序输出到文件中
- 输入流:针对程序来说,把数据从文件输入到程序中
- 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。
- 分类:
- 根据处理数据的类型不同, 分为字节流和字符流;
- 根据数据的流向不同, 分为输入流(读)和输出流(写).
- 功能, 节点/处理
- I/O流:输入输出流(Input/Output)
- 字节流
- OutputStream/InputStream 抽象类(implements Cloaseable, Flushable), 字节输入/输出的所有类的超类
- 输出流接受输出字节并将这些字节发送到InputStream 类某个接收器 要向文件中输出,使用FileOutputStream类
- FileInputStream 从文件系统中的某个文件中获得输入字节。
- FileOutputStream, 当指定的文件不存在, 会自动创建
- 从文件系统中的某个文件中获得输入字节。
- 若
- AutoCloseable -> Closeable
- 作用域, 仅限try语句块, 并且不可以在try()外部声明
- 一条语句
- 8k缓存
- 阻塞
- file.length --> long
- GBK/GB2312也是变长, 读非ASCII, 有些情况会乱码
- available
- 指针
- 非阻塞方法, 除非极端情况下
- OutputStream/InputStream 抽象类(implements Cloaseable, Flushable), 字节输入/输出的所有类的超类
- 字符流
- Writer implements Closeable
- 写入字符流的抽象类
- FileWriter
- Reader implements Closeable
- 读取字符流的抽象类
- FileReader
- 若处理字符文本文件, 但是是复制,则推荐使用字节流, 且不会出错
- 非文本文件, 建议字节流, 所谓字符流,就是按文本文件中的每个字符为单位进行处理,所以处理文本文件,通常
- Writer implements Closeable
建议使用字符流,其它任意情况都建议使用字节流
- 字节流与字符流的区别?
- 字节流会在执行write方法时,直接把数据写入磁盘
- 字符流会在执行write方法时,把数据保存到缓存中,在关闭或刷新时会把缓存的 数据同步到磁盘中字符缓存默认8KB,刷新缓存的方式有三种:
- 缓存已满
- 手动调用flush方法
- 手动调用close方法
- 字符流是基于字节流上的实现
- 文件复制
- 转换流
- 转换流, 可以将一个字节流转换为字符流, 也可以将一个字符流转换为字节流
- OutputStreamWriter: 可以将输出的字符流转换为字节流的输出形式
- InputStreamReader: 可以将输入的字节流转换为字符流的输入形式
- BufferedWriter char lengh 8192
- newLine();
- BufferedReader
- readLine();
- Writer buffer char 1024
- StreamEncoder 8192BYTE(FileWriter)
- 字符流默认带缓存
- BufferedOutputStream 构造时可以手动传入缓存大小(BufferedWriter也可以)
- close()时可以自动关闭
- 关这个流就可以, 可以不关内部的装饰流// ignore this regular
- 没有额外增强方法
- 转换流, 可以将一个字节流转换为字符流, 也可以将一个字符流转换为字节流
- 缓冲流
- 查阅api 作用
- 对文件或其它目标频繁的读写操作,效率低,性能差。 使用缓冲流的好处是,能够更高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来。
- 缓冲流给字节或字符提供一种功能的增强,加入缓冲(缓存)的流操作,可以提高
- 查阅api 作用
写入或读取的效率,在使用流操作时必需添加缓冲
- BufferedInputStream:
- 为另一个输入流添加一些功能,在创建 BufferedInputStream 时,会创建一个内部缓冲区数 组,用于缓冲数据。
- BufferedOutputStream:通过设置这种输出流,应用程序就可以将各个字节写入底层输出流中,而不必针对每次字 节写入调用底层系统。
- BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
- BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
- gbk > gb2312
- 构造时传入的字符数组初始化大小 n
- 大于n时并不会触发flush, 因为Writer抽象类也带有缓存
- 打印流
- 主要功能是用于输出
- print(int i) i -> byte??x
- File自动创建的时机
- PrintWriter -> 构造OutputStream, Writer
- 构造参数
- OutputStream[, boolean autoFlush] --> 默认为false
- Writer[, boolean autoFlush] --> 默认为false
- String filename[, String csn]
- File file[, String csn] / Charset charset, File file
- newLine()为private, 有public方法println()方法调用
- 构造参数
- PrintStream: 字节打印流,给字节输出增强功能
- PrintWriter: 字符打印流,给字符输出增强功能