day10缓冲流(*)
* 概述:
* 基本流的概述:FileInputStream FileOutputStream FileReader FileWriter
* 缓冲流又叫做高效流:在基本流的基础上对其进行优化,相对于基本流效率会高一些。
* 在代码中,缓冲流和基本流的最大区别是:【创建对象不同】
* 【想要一个缓冲流对象,必须给其一个基本流对象】
* 分类
基本流 对应缓冲流:
字节流 FileInputStream BufferedInputStream
FileOutputStream BufferedOutputStream
字符流 FileReader BufferedReader
FileWriter BufferedWriter
* 案例
* 原理
* 缓冲流的原理就是在流对象中定义小数组缓冲数据,可以减少写硬盘的次数,以提高效率
* 如果已经定义了自己的小数组用于缓冲数据,则可以不需要缓冲流也可以(了解)
* 字符缓冲流的特有功能
* BufferedReader : String readLine() 一次读取一个行数据,返回值字符串,【不包含换行符】
* BufferedWriter : void newLine() 写出一个换行符,相当于:bw.write(System.lineSeparator())转换流(*)
* 字符编码
* 什么是编码:按照某种规则,将字符存储到计算机中,称为编码 。
* 什么是解码:将存储在计算机中的二进制数按照某种规则解析显示出来,称为解码。
* 常见的字符编码:
1. ASCII:美国标准信息交换代码,涵盖了英文字母,部分符号,阿拉伯数字
2. GBK:国标扩展码,涵盖了ASCII的内容以及两万多个常用汉字
1. GBK编码下中文占用两个字节
3. ISO-8859-1:拉丁编码,主要用于欧洲
4. Unicode:万国码,涵盖了世界上主流的所有字符
5. UTF-8:是Unicode的一种编码方案
1. 汉字大多数以3个字节存储
2. ASCII的内容以1个字节存储
3. 拉丁文以2个字节存储
4. 极少数以4个字节存储
* 转换流概述
* 就是可以将【字节流】按照【指定的编码】转换成【字符流】
* 其本身是一个字符流,可以接收一个字节流对象,并指定编码格式
* 分类
* 输入转换流: InputStreamReader 可以将字节输入流转换成字符输入流,而且可以自己指定编码
构造:
1. InputStreamReader(InputStream is)
2. InputStreamReader(InputStream is, String charsetName)// charsetName 可指定编码格式
* 输出转换流:OutputStreamWriter
构造:
1. OutputStreamWriter(OutputStream o)
2. OutputStreamWriter(OutputStream o, String charsetName)// charsetName 可指定编码格式
* 使用
* 见上课代码。序列化流&打印流* 序列化流概述
* 序列化:将内存中的对象,通过流的形式存储到指定存储介质中
* 反序列化:将之前存储的对象,通过流的形式还原到内存中
* 序列化流:
* ObjectInputStream
* ObjectOutputStream
* 常用功能:
* ObjectInputStream:
* 构造:ObjectInputStream(InputStream i)
* 读对象:readObject()
* ObjectOutputStream:
* 构造:ObjectOutputStream(OutputStream o)
* 写对象:writeObject()
* 使用
* 见上课代码
* 注意事项:
1. 序列化操作的对象必须实现序列化接口:Serializable
2. 被顺态关键字(transient)修饰的属性不会被序列化
3. 被序列化的类一般都生成固定的序列化ID,保证反序列化的成功性。
* 打印流概述
* 特殊的输出流,既有字节流的方法,可以写字节数据,也可以直接写出字符数据
* 构造方法:
* PrintStream(String fileName)
* 特有功能:
* print
* println
* System.out : 其实就是一个数据目的地指向控制台的打印流
|
|