A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿喵呀 初级黑马   /  2019-3-28 14:05  /  813 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.IO流(磁盘-->内存临时存储)(内存-->磁盘永久存储)
        input         输入
        output        输出
        流数据(字符、字节)1个字符=2个字节  1个字节=8个二进制位

        字节输入流 InputStream        字节输出流 OutputStream
        字符输入流 Reader                字符输出流 Writer

2.字节输出流 OutputStream
        此抽象方法是表示输出字节流的所有类的超类
       
        FileOutputStream:文件字节输出流
                作用:把内存中的数据写入到硬盘的文件中
        构造方法:
                FileOutputStream(String name)
                FileOutputStream(File file)

        写入原理(内存-->硬盘)
        一次写多个字节:write(byte[] b)
                如果第一个字节是正数(0-127),显示的时候会查询SACII表
                如果第一个字节是负数,那么第一个字节和第二个字节,两个字节组成一个中文显示,查询系统默认码表(GBK)
               
        write(byte[] b,int off,int len)把字节数组的一部分写入问价
                 int off:数组的开始索引
                int len:写几个字节
        byte[] getBytes() 把字符串转换为字节数组: “你好”.getBytes()

        utf-8码表中:1个字符等于3个字节
        GBK码表中:    1个字符等于2个字节

3.数据的追加、换行
        FileOutputStream(String name,boolean append)
        FileOutputStream(File file,boolean append)

        在文件的后面追加写数据:
                boolean append:
                        true:追加写
                        false:创建新文件,覆盖原文件


        写换行:写 换行符号
                windows:\r\n
                linux:/n
                mac:/r

4.字节输入流 InputStream
        read()

        FileInputStream把硬盘文件中的数据 ,读取到内存中使用
        (len=fis.read())!=-1
       
        read(byte[] b)从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中



5.字符输入流Reader
        FileReader:文件字符输入流

6.字符输出流Writer
        FileWriter:文件字符输出流

        write(String str)写入字符串
        void flush()刷新该流的缓冲

        把数据写入到内存缓冲区(字符转换为字节的过程)

        关闭和刷新的区别:flush方法和close
                -flush:刷新缓冲区,流对象可以继续使用
                -close:先刷新缓冲区,然后通知系统释放资源,流对象不可以再被使用

7.在jdk1.7之前使用try catch finally处理流中的异常
        try{
                //可能会出现异常的代码
        }catch(){
                //        异常处理逻辑
        }finally{
                //一定会执行的代码
                }


        JDK7的新特性
        在try的后边可以增加一个(),在括号中可以定义流对象
        那么这个流对象的作用域就在try中有效

        JDK9的新特性
        try的前边可以定义流对象
        在try后边的()中可以直接引入流对象的名称(变量名)
        在try代码执行完毕之后,流对象也可以释放,不用写finally


8.Properties集合是一个唯一和IO流相结合的集合
        store(),把集合中的临时数据,持久化写入到硬盘中存储
        load(),把硬盘中保存的文件(键值对),读取到集合中使用

        Object setPropert(String key,String value)调用Hashtable的方法put()
        getPropert(String key)
        Set<String> stringPropertNames()相当于Map集合中的keyset()方法

9.缓冲流
        字符缓冲输入流:
             BufferendRead(Read in )
                Read in :可以传递FileReader
        String readline()以行的方式读取文本
                行的终止符:换行\n
        viod newline换行
        读取到null时结束
10.转换流
        字符编码
        字符集Charset

       
        OutputStreamWriter是字符转换为字节的桥梁(编码)

        OutputStreamWriter(OutputStream out)创建使用默认字符编码
        OutputStreamWriter(OutputStream out,String charsetName)创建使用指定字符集的
                String charsetName:指定的编码表

        InputStreamReader是字节流通向字符流的通道(解码)

11.序列化和反序列化
        ObjectOutputStream:对象的序列化流
       
        void writeObject(Object obj)
        要进行序列化和反序列化的类必须实现Serializable接口,就会给类添加一个标记
                有:就可以序列化和反序列化
                没有:就会抛出NotSerialzableException异常


        ObjectInputStream:对象的反序列化流
                构造方法:
                        ObjectInputStream(InputStream in)
                特有的成员方法:
                        Object readObject()从ObjectInputStream读取对象
               
        静态不能被序列化       
        transient关键字:瞬态关键字
       
        被transient修饰的成员变量,不能被序列化       



















       






























0 个回复

您需要登录后才可以回帖 登录 | 加入黑马