【Java知识点整理】IO流分类:字符流 、 IO流的分类 和 封装流

输入流/输出流 —— > 介质流 or 字节流 or 原始流

  • 传输的是字节
  • 用处:作为通道使用
    学习时间 7月19日

一、字符流

  • 如何读取内部内容? 如何看到文件的内容?比如文本文件————>字符流
  • 字符流也是最原始的流 之一,也具有输入/输出的作用
    • 输入:Reader
    • 输出:Writer
1、读取字符流Reader (抽象类)

用于读取文本的内。常用的方法

  • int read()——返回值类型是int,一次读一个字节
  • int read(char[] cbuf)——读取多个字节,和字节流流一样 数组长度是要读的字节数)

字符流的实现类——InputStreamReader(字节流)

  • 字节流通向字符流的桥梁

  • 使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

  • 举个例子

    public static void main(String[] args) {
        try {
            // 字节流
            InputStream inputStream = new FileInputStream("E:\\test.txt");
            // 字符流
            Reader reader =new InputStreamReader(inputStream);
            char[] buffer = new char[1024];
            // 调用read读取
            int len = reader.read(buffer);
            System.out.println(buffer);
            // 转换为String存储
            String str = new String(buffer , 0 ,len);
            System.out.println(str);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 输出结果 为文件的内容
    
2、输出字符流Writer

像文档内添加对应的字符。常用的方法和字节流类似

  • write(int b) —— 一个字节一个字节的写入
  • write(byte[] buffer) —— 写入一个数组

字符流的实现类——OutputStreamWriter(字节流)

  • 字符流通向字节流的桥梁

  • 举个例子

    // =====输出字符流
    // 用字节流创建文件
    OutputStream outputStream = new FileOutputStream("E:\\huazi.txt");
    // 调用字符流
    Writer writer = new OutputStreamWriter(outputStream);
    writer.write("华子就是帅");
    
    // 关闭端口和字节流不同,要先关 字符流  再关 字节流
    writer.close();
    outputStream.close();
    
    • 注意:关闭端口时,要先关 字符流 再关 字节流

二、字节流的分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ROivDTgI-1659167875464)(\截图\介质流.jpg)]

  • 之前已经学习的,字节流分为输入流和输出流

  • 接着可以分为 介质流 (已学了其中的FileInputStream)和封装流

  • 其中封装类速度更快一些,其中缓存流的速度最快

  • 字符流的结构类似

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDMvZbF8-1659167875467)(\截图\字符流分类.png)]

三、封装流/ 包装流 / 过滤流

1、概念

reader/writer 提供的方法存在缺点:少、不方便

介质流/原始流 的缺点:速度慢

  • 那么,如何解决这些问题? —— 可以通过封装 ——引出 封装流/ 包装流 / 过滤流
  • 就会用到封装流中的 (过滤流Filter....中的) 缓存流 即 Buffered....
2、如何使用封装流
  • 举个例子:使用封装流读取字符

    // ======读取字符流
    // 字节流
    InputStream inputStream = new FileInputStream("E:\\test.txt");
    // 字符流
    Reader reader = new InputStreamReader(inputStream);
    // 调用封装流的 缓存字符流
    BufferedReader bufferedReader = new BufferedReader(reader);
    // 可以直接读取出一个字符串
    String str = null;
    
    // 使用while循环可以读取多行内容
    while ((str = bufferedReader.readLine()) != null){
        // 当读取到的内容不为空的时候 执行循环体
        System.out.println(str);
    }
    \`\~        \!\@\#\$\%\^\&\*\(\)        \_\+\-\=\[\]\{\}\\\|        \;\'\'\:\"\"        \,\.\/\<\>\?
    
    • 用到了BufferedReader.readLine(),可以直接获得一整行的内容,返回值为字符串
    • 用这个方法也可以打印java文件
  • 举个例子,使用封装流新建文件

    // =====输出字符流
    // 用字节流创建文件
    OutputStream outputStream = new FileOutputStream("huazi.txt");
    // 调用字符流
    Writer writer = new OutputStreamWriter(outputStream);
    // 调用封装流
    PrintWriter printWriter = new PrintWriter(writer);
    // 调用成员方法进行内容的输出
    printWriter.println("华仔就是帅");
    printWriter.println("华仔酷毙了");
    
    // 关闭端口和字节流不同,要先关 字符流  再关 字节流
    writer.close();
    outputStream.close();
    
    • 用到了成员方法PrintWriter.println()方法,已经封装的方法,可以放置各种类型的内容

四、IO流小结

一、IO流:分类
  • 方向分类:输入和输出
  • 传输的内容:字节流和字符流
  • 包装的方式:介质流(原始流) / 封装流
二、具体分类

字节流 InputStream / OutputStream

字符流 Writer / Reader

  • 对应的实现类
    • 文件流:FileInputStream / FileOutputStream FileReader / FileWriter
    • 内存流
    • 网络流
    • 等等。。
三、字节流转换为字符流
  • 字符流 = InputStreamReader ( 字节流)
  • 字符流可以进一步封装为 BufferedReader,更方便读取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xcong_Zhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值