Java核心API——io类缓冲流

在前面的学习中我们学习了如何向文件中简单的传输写入数据

java将流分为两类

节点流与处理流

节点流:

又称为低级流,特点:实际连接程序与另一端的"管道",负责实际读写数据的流.

IO一定是建立在某个低级流的基础上进行的.

文件流就是低级流,它们是实际连接程序与文件的管道,负责读写文件数据

处理流:

又称为高级流,特点:不能独立存在,必须连接在其他流上,目的是当数据经过该 流时对数据进行某种加工处理,简化我们的同等操作

实际开发中我们经常串联一组高级流最终到某个低级流上,是的读写数据的过程中以流水线 式的操作对数据加工处理,这个过程也称为"流的连接"

缓冲流

缓冲流:

java.io.BufferedInputStream和BufferedOutputStream

缓冲流是一对高级流,在流连接中的作用:保证读写效率

复制代码
        FileInputStream fis = new FileInputStream("./image.png");
        BufferedInputStream bis = new BufferedInputStream(fis);
        FileOutputStream fos = new FileOutputStream("./image_cp3.png");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int d;
        long start = System.currentTimeMillis();
        while((d=bis.read())!=-1) {
            bos.write(d);
        }
        long end = System.currentTimeMillis();
        System.out.println("复制完毕!耗时"+(end-start)+"ms");
        bis.close();//只需要关闭高级流即可(关闭高级流时它通常会关闭其连接的流)
        bos.close();

写缓冲问题

由于缓冲输出流会将写出的数据装满内部缓冲区(默认8kb的字节数组)后才会进行一次真实的写出操作。 当我们的数据不足时,如果想要及时写出数据,可以调用缓冲流的flush()方法,强制将缓冲区中已经缓 存的数据写出一次。

flush()方法是被定义在java.io.Flushable中。而字节输出流的超类java.io.OutputStream实现了 该接口,这意味着所有的字节输出流都有flush方法。而除了缓冲流之外的高级流的flush方法作用就是调 用它链接的流的flush方法将该动作传递下去。最终传递给缓冲流来清空缓冲区。

flush:冲水 void flush()

强制将缓冲区中已经缓存的数据全部写出

复制代码
        FileOutputStream fos = new FileOutputStream("./bos.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        String line = "学习Java,狠狠的赚一笔";
        byte[] data = line.getBytes(StandardCharsets.UTF_8);
        bos.write(data);
        bos.close();
复制代码
复制代码
复制代码
复制代码
相关推荐
Asus.Blogs11 分钟前
为什么go语言中返回的指针类型,不需要用*取值(解引用),就可以直接赋值呢?
开发语言·后端·golang
青瓦梦滋15 分钟前
【语法】C++的多态
开发语言·c++
C_V_Better20 分钟前
Java Spring Boot 控制器中处理用户数据详解
java·开发语言·spring boot·后端·spring
胡子洲25 分钟前
Spring Boot 应用中实现基本的 SSE 功能
java·spring boot·后端
t1987512827 分钟前
基于Qt的OSG三维建模
java·开发语言
SoFlu软件机器人38 分钟前
Java 框架配置自动化:告别冗长的 XML 与 YAML 文件
xml·java·自动化
贰拾wan1 小时前
【Java-EE进阶】SpringBoot针对某个IP限流问题
java·spring boot·后端·idea
青云交1 小时前
【金仓数据库征文】-- 金仓数据库:技术实践天花板级深度解析,手把手教你玩转企业级应用
java·性能调优·集群部署·金仓数据库 2025 征文·数据库平替用金仓·金仓数据库·语法兼容
AI视觉网奇1 小时前
3d关键点 可视化
开发语言·python·pygame
向宇it1 小时前
【unity游戏开发——编辑器扩展】使用EditorGUI的EditorGUILayout绘制工具类在自定义编辑器窗口绘制各种UI控件
开发语言·ui·unity·c#·编辑器·游戏引擎