首页 > 编程语言 >Java核心API——io类缓冲流

Java核心API——io类缓冲流

时间:2024-08-29 22:52:58浏览次数:11  
标签:Java BufferedOutputStream 缓冲 bos API io flush new 数据

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

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

 


 


 

 




标签:Java,BufferedOutputStream,缓冲,bos,API,io,flush,new,数据
From: https://blog.csdn.net/qishuang6/article/details/141690260

相关文章

  • Java中的String、StringBuilder、StringBuffer
            在Java中,String、StringBuilder 和 StringBuffer 是处理字符串的三个常用类,它们各有特点和适用场景。以下是对这三个类的详细解释、常用方法的代码示例以及它们之间的区别和适用场景。StringString 类表示不可变的字符序列。一旦创建,String 对象的内容......
  • Java Script网页设计案例
    1.JavaScript网页设计案例下面我将提供一个简单的JavaScript网页设计案例,该案例将实现一个动态的待办事项列表(TodoList)。用户可以在页面上添加新的待办事项,标记它们为已完成,以及删除它们。这个案例将使用HTML来构建页面结构,CSS来美化页面,以及JavaScript来添加动态功能。1.1HT......
  • 一篇文章讲清楚Java中的反射
    介绍每个类都有一个Class对象,包含了与类有关的信息。当编译一个新类时,会产生一个同名的.class文件,该文件内容保存着Class对象。类加载相当于Class对象的加载。类在第一次使用时才动态加载到JVM中,可以使用Class.forName("com.mysql.jdbc.Driver")这种方式来控制类的加......
  • 在Ubuntu系统上安装RELION的详细教程。
     从官网给出的安装说明(Download&install-Relion(cam.ac.uk))和Github上给的安装说明(GitHub-3dem/relion:Image-processingsoftwareforcryo-electronmicroscopy)都可以实现RELION的快速安装。但是官网的说明比较繁琐,会让新手感到混淆。虽然Github的教程比较清晰,但是......
  • day07(IO进程)线程 Thread
    目录一.什么是线程1. 概念2. 进程和线程区别3.线程资源二.函数接口1.创建线程:pthread_create2. 退出线程:pthread_exit3.回收线程资源 pthread_join练习:输入输出,quit结束三.同步1.概念2.同步机制3. 函数接口练习:用信号量实现输入输出quit结束......
  • CF1980F1 & F2 Field Division
    前言纪念一下独立做出来的\(2400\)的题Easyversion思路先说\(Easy\)版本的我们走路的方式只有可能是这种样子:(出处:luoguuserFiraCode)不想手绘图了即对列排序后,所形成的一个行编号上升的序列所以\(Easy\)就很简单了,对于每一列的最大值,如果大于当前前缀最大值,则......
  • day03-面向对象-内部类&泛型&常用API
    一、内部类内部类是类中的五大成分之一(成员变量、方法、构造器、代码块、内部类)如果一个类定义在另一个类的内部,这个类就是内部类。场景:当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类内部类分为四种:成员内部类[了解]......
  • 如何使用Spring IOC的注解进行开发
    目录1、如何使用注解标记和扫描2、如何使用注解配置作用域和周期方法3、如何使用注解进行引用类型自动装配4、如何使用注解对基本类型属性赋值Spring IoC(Inversion of Control,控制反转)容器通过注解提供了一种简洁且强大的方式来进行依赖注入和配置管理。注解开发使得......
  • JavaScript开发学习札记:一位Java后端程序员的成长之路
    前言:        这是一篇关于JavaScript的学习笔记,目的是针对java后端开发人员,快速入门并掌握JavaScript这门语言的基本使用,并且能够进入下一阶段框架的学习。引言:为什么学习JavaScript?JavaScript是web开发人员必须学习的3门语言中的一门:HTML定义了网页的内......
  • 第三届电力工程与电气技术国际学术会议(ICPEET 2024) 2024 3rd International Conferenc
    文章目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz提交检索:EICompendex、IEEEXplore、Scopus大会时间:2024年9月13-15日大会地点:马来西亚·吉隆坡最终截稿:2024年9月9日(23:......