当前位置: 首页 > news >正文

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();

 

 

 

 

 

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 什么是杨氏模量
  • 22AP10 SS524 平替 海思HI3521DV200 可提供开发资料
  • IP-RDS-222、IP-PRZ-59-AM12、EG-TRZ-42-L、EG-TRZ-42-H比例减压阀放大器
  • Qt详解QHostInfo
  • 【python报错已解决】AttributeError: module ‘PIL.Image‘ has no attribute ‘ANTIALIAS‘
  • 对标GPT4o,智谱推出新一代基座大模型 GLM-4-Plus
  • JDBC和Mybatis中的批处理
  • 【Python数据分析】numpy中的npz和npy的用法和区别
  • scrapy框架--快速了解
  • 队列算法【基于顺序表的环形队列】
  • VMware安装Ubuntu 23.10.1系统图文版
  • 【小白深度学习入门】【1】卷积神经网络CNN 结构、基本原理以及常见问题详解
  • 前端 数值列 禁止输入多个小数点
  • Debian Linux上安装Jumpserver
  • vue-draggable-plus实现某些子元素不被拖拽
  • 0x05 Python数据分析,Anaconda八斩刀
  • 230. Kth Smallest Element in a BST
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring Cloud中负载均衡器概览
  • SQL 难点解决:记录的引用
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 测试开发系类之接口自动化测试
  • 彻底搞懂浏览器Event-loop
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 让你的分享飞起来——极光推出社会化分享组件
  • 深入浏览器事件循环的本质
  • 为视图添加丝滑的水波纹
  • 延迟脚本的方式
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # 计算机视觉入门
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #VERDI# 关于如何查看FSM状态机的方法
  • (13)Hive调优——动态分区导致的小文件问题
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (Python第六天)文件处理
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .net6+aspose.words导出word并转pdf
  • .Net插件开发开源框架
  • .NET开发者必备的11款免费工具
  • .NET设计模式(7):创建型模式专题总结(Creational Pattern)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @ModelAttribute使用详解