缓冲流 转换流 序列化流 打印流
IO流:
缓冲流: BufferedInputStream / BufferedOutputStream, BufferedReader / BufferedWriter
IO框架体系结构
// 体系结构:
字节流
|_ InputStream # 字节输入流
| |_ FileInputStream # 专门操作文件的字节输入流
| |_ BufferedInputStream # 带有缓冲区的字节输入流, 效率高
| |_ ObjectInputStream # 对象输入流
|
|_ OutputStream # 字节输出流
|_ FileOutputStream # 专门操作文件的字节输出流
|_ BufferedOutputStream # 带有缓冲区的字节输出流, 效率高
|_ ObjectOutputStream # 对象输出流
|_ PrintStream # 字节打印流
字符流
|_ Reader # 字符输入流
| |_ BufferedReader # 带有缓冲区的字符输入流, 效率高
| |_ InputStreamReader # 将字节流转换为字符流输入的转换输入流
| |_ FileReader # 专门操作文件的字符输入流
|
|_ Writer # 字符输出流
|_ BufferedWriter # 带有缓冲区的字符输出流, 效率高
|_ OutputStreamWriter # 将字符流转换为字节流输出的转换输出流
| |_ FileWriter # 专门操作文件的字符输出流
缓冲流
缓冲流的原理
缓冲流的原理:
底层也是使用基本流(FileXxx)来读写 ,但缓冲流内部定义了一个缓冲数组, 在读的时候类似于我们一次读一个数组的方式, 减少了磁盘操作次数, 提高了程序效率
缓冲字节输出流: BufferedOutputStream
BufferedOutputStream使用步骤:
1.创建FileOutputStream对象, 构造方法中绑定要输出的目的地
2.创建BufferedOutputStream对象, 构造方法中传递FileOutputStream对象
3.使用BufferedOutputStream对象中的方法 write(), 把数据写入到内部缓冲区中
4.使用BufferedOutputStream对象中的方法 flush(), 把内部缓冲区中的数据,刷新到文中
(第四部可以省略)
5.释放资源
缓冲字节输入流: BufferedInputStream
1.创建FileInputStream对象, 构造方法中绑定要读取的数据源
2.创建BufferedInputStream对象, 构造方法中传递FileInputStream对象
3.使用BufferedInputStream对象中的方法 read(), 读取文件
4.释放资源
缓冲字符输出流: BufferedWriter
特有方法:void newLine(): 写入一个换行符, 换行符自动根据当前系统确定.
缓冲字符输入流: BufferedReader
特有方法:String readLine(): 一次读一行字符串, "不包含换行符". 读到文件末尾返回null
转换流
字符编码和字符集
什么是编码:编码: 字符 -> 字节 'a' -> 97
什么是解码
解码: 字节 -> 字符 97 -> 'a'
编码表: 字符和二进制数字的对应规则
字符集和编码表: 字符集包含编码表
ASCII字符集
ASCII编码表
ASCII扩展编码表
ISO-8859-1字符集: Tomcat Web服务器程序
Latin-1: 拉丁字符. 没有中文. 每个字符由1个byte组成
GB字符集
GB2312编码表: 每个字符由2个byte组成
GBK编码表: 每个字符由2个byte组成
GB18030编码表: 每个字符由1, 2, 4个byte组成
Unicode字符集
UTF-8: ASCII字符占1个byte, 拉丁字符占2个byte, 中文占3个byte, Unicode辅助字符占4个byte
UTF-16
UTF-32
ANSI: 表示使用系统默认编码表
乱码问题: FileReader读取GBK编码
转换流原理: 字符流和转换流的关系
java.io.Reader
|_ InputStreamReader: 转换字符输入流 byte --查指定码表--> char, char[], String
|_ FileReader byte --查UTF-8码表--> char
java.io.Writer
|_ OutputStreamWriter: 转换字符输出流 char, char[], String --查指定码表--> byte
|_ FileWriter char --查UTF-8码表--> byte
使用转换流写入指定编码的文本文件
OutputStreamWriter
new OutputStreamWrite(基本流 , "编码"")
能够说出打印流的特点
1.只有输出, 2.不抛IOException
3. 特有方法 print() println(), 接收任意类型参数, 原样输
能够使用反序列化流读取文件到程序中够使用序列化流写出对象到文件
ObjectInputStream
Object readObject()
|
|