JavaSE进阶-IO流(一)

    IO流的相关概念                【了解】
    IO流-字节基本流               【重点】
    IO流-字节缓冲流               【重点】
    IO流-字节流读中文的问题         【了解】

IO流的相关概念                【了解】
    IO流的概述
        什么是IO流
            I:input,输入
            O:output,输出
            IO流就是输入输出流

        IO流的作用
            可以处理设备(硬盘、内存、控制台和打印机等...)之间的数据传输
            我们学习IO流主要研究的是硬盘和内存之间的数据传输

        IO流的使用场景
            文件的读取
            文件的写出
            文件的复制
            文件的上传
            文件的下载
            ...

        IO流的注意事项
            1、IO流涉及的类都在java.io包下,不要导错包
            2、IO流的每一个操作都有编译时异常,编译时期必须处理
            3、IO流会占用系统资源,使用完必须关闭流

    IO流的分类
        按照流向分
            输入流
            输出流

            按照流向分,到底是输入还是输出,参照物是内存

        按照操作的数据的类型分
            字节流
            字符流

            字节:byte
            字符:char

            计算机底层所有的数据都是0和1这样的二进制位的数据组成,8个二进制数称为一个字节
            字符是由一个或者多个字节组成

        体系结构
            字节输入流
                InputStream抽象类
                    |-FileInputStream类          字节基本流
                    |-FilterInputStream
                        |-BufferedInputStream类  字节缓冲流
            字节输出流
                OutputStream抽象类
                    |-FileOutputStream类         字节基本流
                    |-FilterOutputStream
                        |-BufferedOutputStream类 字节缓冲流

            字符输入流
                Reader抽象类
                    |-BufferedReader类           字符缓冲流
                    |-InputStreamReader类        转换流
                        |-FileReader类           字符基本流

            字符输出流
                Writer抽象类
                    |-BufferedWriter类           字符缓冲流
                    |-OutputStreamWriter类       转换流
                        |-FileWriter类           字符基本流

        IO流的学习非常简单,因为IO流其实就是在学习6行代码
            输入:3行
            输出:3行

            输入和输出这分别3行的代码对应的是IO流操作的三个步骤:
            1、创建流对象,关联要操作的文件
            2、读或者写操作
            3、关闭流

IO流-字节基本流               【重点】
    FileOutputStream类
        它的父类是OutputStream抽象类,父类中定义了所有的字节输出流的共性方法:
        void write(byte[] b):一次写出一个字节数组(多个字节)
        void write(byte[] b, int off, int len):一次写出一个字节数组的一部分(多个字节)
        void write(int b):一次写出一个字节
        void close()  :关闭流,释放资源

        FileOutputStream名称解析:
            File:操作的设备类型,File表示操作的是文件(硬盘)
            OutputStream:表示该流是字节输出流

            所以这个类可以让我们将内存中的数据输出(写)到文件中。

        构造方法
            FileOutputStream(String name)
            FileOutputStream(File file)
            * 参数
                要关联的文件,可以传递文件的全路径名,也可以传递文件的File对象

       一次写出多个字节的操作
            void write(byte[] b):一次写出一个字节数组(多个字节)
            void write(byte[] b, int off, int len):一次写出一个字节数组的一部分(多个字节)
                * 参数
                int off:起始索引
                int len:写出的个数
        两个小问题
            如何换行写
                windows \r\n
                mac \r
                linux \n

            如何追加写
                FileOutputStream(String name, boolean append)
                FileOutputStream(File file, boolean append)
                * boolean append是否追加的开关
                    如果传递的true,表示追加

   FileInputStream类
        它的父类是InputStream抽象类,父类中定义了所有的字节输入流的共性方法:
        int read():一次读取一个字节,如果读取到文件末尾则返回-1
        int read(byte[] b):一次读取一个字节数组(多个字节),
                            返回的是读取到数组中的有效字节个数
                            如果读取到文件末尾则返回-1
        void close()  :关闭流,释放资源

        FileInputStream名称解析:
            File:操作的设备类型,File表示操作的是文件(硬盘)
            InputStream:表示该流是字节输入流

            所以这个类可以让我们从文件中输入(读取)数据到内存中。

IO流-字节缓冲流               【重点】
    字节缓冲流:也可以称为字节高效流,可以提高读写的效率
              缓冲流,原因是底层有缓冲区(其实就是数组)

    BufferedOutputStream类
        它的父类是OutputStream抽象类,父类中定义了所有的字节输出流的共性方法:
        void write(byte[] b):一次写出一个字节数组(多个字节)
        void write(byte[] b, int off, int len):一次写出一个字节数组的一部分(多个字节)
        void write(int b):一次写出一个字节
        void close()  :关闭流,释放资源

        构造方法
            BufferedOutputStream(OutputStream out)

    BufferedInputStream类
        它的父类是InputStream抽象类,父类中定义了所有的字节输入流的共性方法:
                int read():一次读取一个字节,如果读取到文件末尾则返回-1
                int read(byte[] b):一次读取一个字节数组(多个字节),
                                    返回的是读取到数组中的有效字节个数
                                    如果读取到文件末尾则返回-1
                void close()  :关闭流,释放资源

        构造方法
            BufferedInputStream(InputStream in)
            注:缓冲流不能直接关联文件

           BufferedInputStream
              内置了一个默认长度为8192的字节数组(缓冲区)

IO流-字节流读中文的问题         【了解】
    出现乱码问题

    编码表
        什么是编码表
            是一张计算机能识别的内容(二进制/字节)和人类能识别的内容(字符)的对应关系表

            01100001        a
            01100010        b

        常见的编码表
            ASCII码表:第一张码表,只有美国/英国常用的文字、数字和符号的对应关系表
                        内部不包含中文的对应关系
            GBK码表:内置ASCII码表,包含中文
                        1个英文字母、数字这些字符占1个字节
                        1个中文占2个字节
            Unicode码表:统一、万国码表,类似于联合国,里面包含大部分主要国家的文字、符号
                        当然里面也包含中文
                        UTF-8编码格式:
                        1个英文字母、数字这些字符占1个字节
                        1个中文占3个字节
            IOS-8859-1码表:西欧/拉丁编码,里面不包含中文

        编码和解码操作
            编码:字符->字节
            解码:字节->字符

            编码和解码操作都需要查询编码表,并且要保证编码和解码使用的编码表是相同的,否则会出现乱码问题

    字符串的编码和解码操作
        针对字符串(String)

        编码
             byte[] getBytes():使用idea的默认编码表(utf-8)进行编码操作
             byte[] getBytes(String charsetName) :使用指定的编码表进行编码操作
        解码
            String(byte[] bytes) :使用idea的默认编码表(utf-8)进行解码操作
            String(byte[] bytes, String charsetName) :使用指定的编码表进行解码操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值