缓冲流【Buffered】

2023-11-14

缓冲流【Buffered】

缓冲流我们理解为原来的使用数组方式进行数据传输的一种增强

按照类型分为:

  • 字符缓冲流:BufferedReader, BufferedWriter
  • 字节缓冲流:BufferedInputStream, BufferedOutputStream

缓冲流的基本原理,是在创建对象的时候,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写数据,减少系统IO操作的次数,减少开销,提高读写的效率。

字节缓冲流

构造方法

  • public BufferedInputStream(InputStream input) : 创建一个新的缓冲输入流
  • public BufferedInputStream(InputStream input,int size)
  • public BufferedOutputStream(OutputStream output) : 创建一个新的缓冲输出流
  • public BufferedOutputStream(OutputStream output,int size) : 指定大小

BufferedOutputStream使用步骤:

  1. 创建一个FileOutputStream流对象,构造方法中绑定要写入数据的目的地
  2. 创建BufferedOutputStream对象,构造方法中传入FileOutputStream流对象
  3. 使用BufferedOutputStream对象中的方法writer,把数据写入到内部缓冲区中
  4. 使用BufferedOutputStream对象中的方法flush,把内存缓冲区中的数据刷新到目的地中
  5. 释放资源

BufferedInputStream使用步骤:

  1. 创建一个FileInputStream流对象,构造方法中绑定需要写入数据的数据源
  2. 创建BufferedInputStream对象,构造方法中传递FileInputStream流对象
  3. 使用BufferedInputStream对象中的方法read,把数据读取到内部当中。
  4. 释放资源。|
import java.io.FileInputStream;
import java.io.IOException;

public class BufferedInput {
    public static void main(String[] args) throws IOException {
        FileInputStream fis=new FileInputStream("day29_IO\\one.txt");
        BufferedInputStream bis=new BufferedInputStream(fis);
        int len=0;
		/* while ((len= bis.read())!=-1){
            System.out.println((char)len);
        }*/
        byte[] bytes=new byte[1024];
        while ((len= bis.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
        }
    }
}

字符缓冲流

构造方法

  • public BufferedWriter(Writer out) : 创建一个新的字符缓冲输出流
  • public BufferedReader(Reader oin) : 创建一个新的字符缓冲输入流

特有方法

  • BufferedReader: public String readLine() : 读取整行的文本信息
  • BufferedWriter : public void newLine() : 写入一行的行分隔符,由系统属性定义换行符号

使用步骤:

  1. 创建一个字符缓冲输出流对象,构造方法中传递一个字符输出流
  2. 调用字符缓冲输出流对象中的writer,把数据写入到内存缓冲区中
  3. 调用flush方法,把缓冲区中的数据刷新到文件中
  4. 释放资源
/*
    String readLine(): 读取一个文本行,读取一整行的数据
    返回值:
        包含该行内容的字符串,不包含任何行的终止符号,如果已经读到文件末尾,返回null
     使用步骤:
        1.创建一个字符缓冲输入流对象,构造方法中传递一个字符输入流
        2.使用字符缓冲输入流对象中的read/readLine,读取文本信息
        3.关闭
 */
public class DemoBufferedReader {
    public static void main(String[] args)throws IOException {
        BufferedReader reader=new BufferedReader(new FileReader("day29_IO\\abc.txt"));
        /*String s = reader.readLine();
        System.out.println(s);*/
        String str=null;
        while ((str= reader.readLine())!=null){
            System.out.println(str);
        }
        reader.close();
    }
}

字节流与缓冲字节流的比较

public class Test {
    public static void main(String[] args) throws IOException {
        show1();
        show2();
    }
    public static void show1()throws IOException{
        long start=System.currentTimeMillis();
        FileInputStream fis=new FileInputStream("C:\\Users\\LiuJunLiang\\Desktop\\3.gif");
        FileOutputStream fos=new FileOutputStream("C:\\Users\\LiuJunLiang\\Desktop\\新建文件夹\\1.gif");
        byte[] bytes=new byte[1024];
        int len=0;
        while ((len= fis.read(bytes))!=-1){
            fos.write(bytes,0,len);
        }
        fos.close();
        fis.close();
        long end=System.currentTimeMillis();
        System.out.println(end-start);
    }
    public static void show2()throws IOException{
        long start=System.currentTimeMillis();
        BufferedInputStream bis=new BufferedInputStream(new FileInputStream("C:\\Users\\LiuJunLiang\\Desktop\\3.gif"));
        BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("C:\\Users\\LiuJunLiang\\Desktop\\新建文件夹\\2.gif"));
        byte[] bytes=new byte[1024];
        int len=0;
        while((len= bis.read(bytes))!=-1){
            bos.write(bytes,0,len);
        }
        bos.close();
        bis.close();
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

缓冲流【Buffered】 的相关文章

  • 唯一索引或主键违规:“PRIMARY KEY ON PUBLIC.xxx”; SQL语句

    每当我的应用程序启动时 我都会收到以下错误消息 Caused by org h2 jdbc JdbcSQLException Unique index or primary key violation PRIMARY KEY ON PUBL
  • 如何在日期选择器中设置不在当前月份的单元格的样式

    我目前正在为我的 JavaFX 应用程序制作注册表 问题是 当日期选择器中的单元格不在页面的月份上时 我想让该单元格变灰 让我们看看我当前的日期选择器 我的日期选择器 正如您所看到的 我希望下个月的日期 27 日 28 日 30 日以及 1
  • 如何使用 FileChannel 将一个文件的内容附加到另一个文件的末尾?

    File a txt好像 ABC File d txt好像 DEF 我正在尝试将 DEF 附加到 ABC 所以a txt好像 ABC DEF 我尝试过的方法总是完全覆盖第一个条目 所以我总是最终得到 DEF 这是我尝试过的两种方法 File
  • 如何在 JFace 的 TableViewer 中创建复选框?

    我创建了一个包含两列的 tableViewer 我想将其中一列设为复选框 为此 我创建了一个 CheckBoxCellEditor 但我不知道为什么它不起作用 名为 tableName 的列显示其值正常 色谱柱规格如下 String COL
  • 我需要在 Spring 中检查每个控制器中的有效会话吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设在 Spring Mvc 的 Web 应用程序中 我们是否需要检查每个控制器或 jsps 中的有效会话 我该如何解决 MVC 中的
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 序列化对象以进行单元测试

    假设在单元测试中我需要一个对象 其中所有 50 个字段都设置了一些值 我不想手动设置所有这些字段 因为这需要时间而且很烦人 不知何故 我需要获得一个实例 其中所有字段都由一些非空值初始化 我有一个想法 如果我要调试一些代码 在某个时候我会得
  • 在具有相同属性名称的不同数据类型上使用 ModelMapper

    我有两节课说Animal AnimalDto我想用ModelMapper将 Entity 转换为 DTO 反之亦然 但是对于具有相似名称的一些属性 这些类应该具有不同的数据类型 我该如何实现这一目标 动物 java public class
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • 当单元格内的 JComboBox 中有 ItemEvent 时,如何获取 CellRow

    我有一个 JTable 其中有一列包含 JComboBox 我有一个附加到 JComboBox 的 ItemListener 它会根据任何更改进行操作 但是 ItemListener 没有获取更改的 ComboBox 所在行的方法 当组合框
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是

随机推荐

  • 有 Docker 谁还在自己本地安装 Mysql ?

    引言 自己在个人电脑上开发项目或脚本时 经常会遇到数据存储的问题 咱们工作项目中 Mysql 是常用的业务数据库 如果要存储数据 难道除了在我们个人电脑安装 Mysql 服务就别无他选了吗 No No 你还有一种选择可以不用在你自己电脑上安
  • vLLM 实战

    引言 随着人工智能技术的飞速发展 以及今年以来 ChatGPT 的爆火 大语言模型 Large Language Model LLM 受到越来越多的关注 为了实现 LLM 部署时的推理优化 全球各地有众多团队做出了各种优化框架 本文以加州大
  • 视频压缩:I帧、P帧、B帧

    说明 1 本文通过整理而来 集多个高手的精华 此为最重点 2 因为在海思平台做多媒体视频处理 所以了解I帧 P帧 B帧等压缩 编解码特点是必须的 3 海思I帧间隔即GOP取值范围 0 1000 以帧为单位 为动态属性 4 欢迎拍砖
  • 2020-3-29 深度学习笔记16 - 结构化概率模型 1 (非结构化建模的挑战-内存要求大/统计销量低/运行时间长)

    第十六章 深度学习中的结构化概率模型 中文 英文 深度学习为研究者们提供了许多建模方式 用以设计以及描述算法 其中一种形式是结构化概率模型的思想 结构化概率模型是许多深度学习重要研究方向的关键组成部分 结构化概率模型使用图来描述概率分布中随
  • UniAPP布局

    uniapp建议使用flex布局 首先定义flex容器 display flex flex容器按主轴排列填充 支持横向 纵向排列 flex属性如下 flex direction排列方向 flex direction row flex wra
  • 上传已有项目到Gitee

    1 创建好gitee仓库 正常新建即可 默认已经创建好了 2 在本地项目目录下 右键 点击git bash here 3 在窗口输入命令 git init 这时候文件夹会多出一个 git文件夹 4 在码云复制仓库地址 然后 在窗口输入命令
  • LeetCode——019

    19 Remove Nth Node From End of List My Submissions QuestionEditorial Solution Total Accepted 104327 Total Submissions 35
  • qt 将图片转为base64字符串html直接可用

    Base64是基于64个可打印字符来显示2进制数据 它用于传输8Bit字节代码 并在HTTP传输中广泛应用 原理 把一连串的二进制数 拆为6个6个的二进制组 然后每个组头部补2个0 从而将数的范围限制在64以内 都是可视化字符了 解码是逆向
  • 抑止TDD noise

    抑止TDD noise 的措施 TDD noise Time Division Distortion 所造成的原因为手机射频发射模块端的功率放大器 Power Amplify 每1 216 8秒会有一个发射讯号产生 在该讯号中包含900MH
  • android opencv卡顿,Opencv读取摄像头卡顿

    Opencv读取摄像头卡顿 开发环境 Win10系统 罗技HD1080p高清摄像头 UE4 21 VS2017后端 开发原理 多线程中经过OpenCV对摄像头进行高清采集 1920 1080 而后显示到UMG中 多线程 遇到问题 在2k采集
  • Zipkin进行链路跟踪

    Zipkin 简介 Zipkin 是 Twitter 开源的分布式跟踪系统 基于 Dapper 的论文设计而来 它的主要功能是收集系统的时序数据 从而追踪微服务架构的系统延时等问题 Zipkin 还提供了一个非常友好的界面 便于我们分析追踪
  • 黑马Java品优购分布式电商项目全套视频及源码

    百度网盘链接 链接 https pan baidu com share init surl ItIpkDQ0Dwragb47HcLXKg 提取码 k5we 黑马微服务项目乐优商城全套 https blog csdn net m0 37768
  • Java生成二维码的几种实现方式(基于Spring Boot)

    本文将基于Spring Boot介绍两种生成二维码的实现方式 一种是基于Google开发工具包 另一种是基于Hutool来实现 为了方便理解二维码的实际应用场景 举一些例子 1 进销存系统 想必大家都听说过 其系统中的商品二维码承载了许多重
  • android 镜像文件img 介绍

    Android 源码 编译后 在 out target product generic下生成的三个镜像文件 ramdisk img 根文件系统 system img 包括了主要的包 库等文件 userdata img 包括了一些用户数据 以
  • 使用alist连接百度网盘和阿里云盘挂载到本地磁盘

    1 下载alist软件 alist软件下载地址 https github com alist org alist 跳转后 找到对应的windows版本 2 下载后解压 并启动服务 注意 alist的启动方式不是传统的双击启动 需要用命令提示
  • ios跨线程通知_一种基于Metal、Vulkan多线程渲染能力的渲染架构

    快手Y tech 原创 最新技术干货分享 随着3D渲染场景规模越来越复杂 单线程渲染架构在满足业务性能要求时已经捉襟见肘 因此 多线程渲染显得愈发重要 本文首先介绍了新一代图形渲染接口Metal Vulkan 以及它们的多线程渲染特性 然后
  • 复杂数据集,召回、精度等突破方法记录【以电科院过检识别模型为参考】

    目录 一 数据分析与数据集构建 二 所有相关的脚本 三 模型效果 一 数据分析与数据集构建 由于电科院数据集有17w 18w张 标签错误的非常多 且漏标非常多 但是所有有效时间只有半个月左右 显卡是M60 训练速度特别慢 所以需要尽量留足训
  • Audio在移动端的兼容性问题(1)

    需求 做一个SPA的web互动测试游戏 题目是自动切换播放的音频 根据音频内容选择正确选项 兼容移动端的微信 APP 浏览器和PC端的主流浏览器 准备 第一步 我们先查看兼容性 打开Can I Use CanIUse提供了各种浏览器所能支持
  • MarkDown学习笔记、语法 表格序号:41

    1 标题 需要在这段文字前面加上 再在 后加一个空格即可 还可增加二 三 四 五 六级标题 总共六级 只需要增加 增加一个 标题字号相应降低一级 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 二级标题 三级标题 四级标题 五级
  • 缓冲流【Buffered】

    缓冲流 Buffered 缓冲流我们理解为原来的使用数组方式进行数据传输的一种增强 按照类型分为 字符缓冲流 BufferedReader BufferedWriter 字节缓冲流 BufferedInputStream BufferedO