流:流是内存与存储设备之间传输数据的通道。
输入流:将<存储设备>中的内容读到内存中。
输出流:将<内存>中的内容写入到存储设备中。
按单位:
- 字节流:以字节为单位,可以读写所有数据
- 字符流:以字符为单位,只能读写文本数据
字节流和缓冲流:
字节流:数据以字节为单位进行读写操作
缓冲流:将一个一个的字节先存入到缓冲区中。在JVM中会开辟一块缓冲区的内存空间,然后将文件中的数据读取到缓冲区中,直到读满这个缓冲,才会将缓冲区的数据获取到程序中。
对象流:(ObjectOutputStream/ObjectInputStream) 使用流传输对象的过程称为序列化、反序列化
- 增强缓冲区功能
- 增强了读写8种基本数据类型和字符串的功能
- 增强读写对象的功能
ObjectOutputStream将Java对象的基本数据类型和图形写入OutputStream,可以使用ObjectOutputStream读取(重构)对象。通过在流中使用文件可以实现对象持久存储。如果流是网络套接字流,则可以在另一台主机或另一个进程中重构对象。
字符编码:
UTF-8 针对Unicode码表的可变长度字符编码
GB2312简体中文
GBK 简体中文扩充
BIG5台湾 繁体中文
字符流(FileReader/FileWrite):
FileReader:
- public int read(char[] c) //从流中读取多个字符,将读到的 内容存入c数组,返回实际读到的字符数;如果达到文件的尾部,则返回-1、
FileWrite:
- public void write(String str) //一次写多个字符,将b数组中所有字符,写入输出流。
缓冲流:BufferedReader/BufferedWriter
- 高效读写
- 支持输入换行符
- 可一次写一行,读一行
BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小。
BufferedWriter: 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
打印流PrintWriter:
- 封装了print()/println()方法,支持写入后换行
- 支持数据原样打印
桥转换流:InputStreamReader/OutputStreamWriter
- 可将字节流转换为字符流
- 可设置字符的编码方式
InputStreamReader:是字节流通向字符流的桥梁,它使用指定的charset读取字节并将其解码为字符。
OutputSteeamWrite 是字符流通向字节流的桥梁:可使用指定的charset将要写入流中的字符编码成字节。