黑马程序员技术交流社区

标题: 【成都校区】JAVAEEday10 [打印本页]

作者: blovedr    时间: 2019-1-17 08:48
标题: 【成都校区】JAVAEEday10
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 : 其实就是一个数据目的地指向控制台的打印流







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2