Java 日看一类(3)之IO包中的BufferedOutputStream类

BufferedOutputStream类讲解 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 阅读详情

继承和导入关系:

BufferedOutputStream类继承自FilterOutputStream类





BufferedOutputStream类和上篇博客所讲到BufferedInputStream类有着类似的功能,还是常规,先来分析一下关于该类的注释:

/**
 * The class implements a buffered output stream. By setting up such
 * an output stream, an application can write bytes to the underlying
 * output stream without necessarily causing a call to the underlying
 * system for each byte written.
 *
 * @author  Arthur van Hoff
 * @since   JDK1.0
 */

比BufferedInputStream的注释看着少了很多,功能和代码量也相对应的少了许多。

注释的大意如下:

这个类是一个缓冲输出流的接口

通过设置一个这样的输出流

一个应用程序可以向类内封装的输出流写入byte类型的数据且不必通过调用系统底层功能去操作每一个byte数据




BufferedOutputStream类含有如下的变量:

缓冲区数组:

protected byte buf[];

数组中有效数据长度:

protected int count;


BufferedOutputStream类含有如下的方法:

构造方法(构造默认大小的缓冲数组):

public BufferedOutputStream(OutputStream out) {
    this(out, 8192);
}

构造方法(构造自定义大小的缓冲数组):

public BufferedOutputStream(OutputStream out, int size) {
    super(out);
    if (size <= 0) {
        throw new IllegalArgumentException("Buffer size <= 0");
    }
    buf = new byte[size];
}

将缓冲数组中的数据写入输出流中:

private void flushBuffer() throws IOException {
    if (count > 0) {
        out.write(buf, 0, count);
        count = 0;
    }
}

flushBuffer的上层函数,首先判定当前有效值是否已经超出缓冲数组最大值,如果超过则通过调用flushBuffer将缓冲数组中的数据写入输出流,然后重置缓冲数组并向数组中写入数据,否则直接向缓冲数组中写入数据:

public synchronized void write(int b) throws IOException {
    if (count >= buf.length) {
        flushBuffer();
    }
    buf[count++] = (byte)b;
}

上个write函数的重载,直接一次性写入一个数组。当需写入数组长度大与缓冲区长度时,先将缓冲区的数据写入输出流,然后将该写入数组不经缓冲区直接写入输出流。若写入数组长度大于当前缓冲区剩余长度且小于缓冲区长度时,将缓冲区数据写出并重置,然后将该数组置入缓冲区。若写入数组长度小于当前缓冲区剩余长度则直接置入缓冲区:

public synchronized void write(byte b[], int off, int len) throws IOException {
    if (len >= buf.length) {
        /* If the request length exceeds the size of the output buffer,
           flush the output buffer and then write the data directly.
           In this way buffered streams will cascade harmlessly. */
        flushBuffer();
        out.write(b, off, len);
        return;
    }
    if (len > buf.length - count) {
        flushBuffer();
    }
    System.arraycopy(b, off, buf, count, len);
    count += len;
}

将输出流内东西输出。先将自身缓冲区内数据写入输出流,然后将输出流内数据向目标文件写出:

public synchronized void flush() throws IOException {
    flushBuffer();
    out.flush();
}



相对于缓冲输入流,缓冲输出流的结构非常简单,功能也十分明确。

Java IO流之BufferedOutputStream类,让Java文件操作更高效! 在Java开发语言中,IO流是非常常见的操作。在IO流中,BufferedOutputStream类是一个非常重要的类。BufferedOutputStream类继承自OutputStream类,是一个带缓冲区的输出流,可以提高输出效率和减少IO次数。在本篇文章中,我们将对BufferedOutputStream类进行深入的研究和分析。 阅读详情

相关推荐

提升Java IO性能!探究BufferedOutputStream的奥秘

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!

**My Coding Family** 1104

Java中BufferedOutputStream类的常用方法

BufferedOutputStream字节缓冲输出流构造方式第一种开发中)    public BufferedOutputStream(OutputStream out):采用的默认的缓冲区大小(足够大了) ,来构造一个字节缓冲输出流对象public BufferedOutputStream(OutputStream out,int size):指定size缓冲区大小构造缓冲输出流对象Ille...

scbiaosdo的博客 3万+

探究BufferedOutputStream的奥秘

在Java开发过程中,IO操作是我们必定会遇到的问题。而对于IO操作的性能问题,也是我们需要特别关注的问题。在Java中,我们可以通过使用来提升IO操作的性能。本文将深入探讨的奥秘,以提升Java IO性能。本文将从以下几个方面入手,探究的概述和使用方法的源代码解读的性能测试和分析通过对BufferedOutputStream的深入研究,我们将了解到如何正确使用BufferedOutputStream来提升IO操作的性能,同时也可以更深入地了解Java IO的实现原理。是Java中的一个IO流,它是。

**My Coding Family** 853

Java基础:IO 流中的 flush

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。 内容概要 Java IO流的设计不得不让人拍案叫绝,佩服设计者鬼斧天工的手法。 如果你是Java初学者,我敢保证第一次接触Java的IO类,一定会 ”狂晕!”,倒不是因为它有多么难学而是太多,而且及其让人有种 “不识庐山...

CodingMan 4万+

NLP-Beginner 任务一:基于机器学习的文本分类(超详细!!)

NLP-Beginner 任务一:基于机器学习的文本分类传送门一. 介绍1.1 任务简介1.2 数据集1.3 流程介绍二. 特征提取2.1 词袋特征(Bag-of-word)2.2 N元特征 (N-gram)三. 最优化求解3.1 Softmax回归介绍3.2 损失函数3.3 梯度下降3.4 学习率四. 代码及实现4.1 实验设置4.2 结果展示4.3 代码新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、

0oTedo0 9939

win11重装系统简易教程-小白也可以上手!

本文介绍一下win11系统重装的各个步骤,也作为记录供自己后面查看。附上我之前参考的一位知乎大神写的重装win10系统文章的地址本文用到的工具全部是,不需要下载第三方镜像文件(不是说这个不好,只是第三方的软件或镜像文件网上非常多,琳琅满目,小白需要筛选甄别,直接用官方的就比较省心,大神请自便~)

Sddqa的博客 1万+

Java 日看一类(40)之IO包中的OutputStream类和Closeable接口

该类是输出流的“鼻祖”,所有的输出流都继承了该类该类完成了Closeable,Flushable接口无引入其他包该类的类头注释如下:/** * This abstract class is the superclass of all classes representing * an output stream of bytes. An output stream accepts output...

github_37666068的博客 377

【技术实践指南】Python解析FactSet Revere供应链数据:构建企业级断裂与重构监测指标

本文提供了一份企业级Python实践指南,详细解析如何利用FactSet Revere供应链数据库,构建供应链断裂与重构监测指标。内容涵盖数据清洗、关系对筛选、时间序列处理及核心指标(断裂、恢复、转移)的工程化实现,旨在帮助数据工程师与分析师搭建自动化、可解释的供应链风险监控系统。

weixin_29051811的博客 936

Java.io.BufferedOutputStream类使用例子

Java.io.BufferedOutputStream类实现一个缓冲输出流。通过建立这样一个输出流,应用程序可以写字节到底层输出流,而不必然导致调用底层的系统写入的每个字节。更多教程请访问http://www.manongzj.com 类声明 以下是Java.io.BufferedOutputStream类的声明: public class BufferedOutputStream extends FilterOutputStream 字段域 以下是Java.io.BufferedOu.

wuxiaopengnihao1的博客 289

UDS $27服务DLL文件生成

UDS 27算法 DLL文件生成

hkj8808的博客 1283

如何使用 Python 爬取 58 同城招聘信息

职位名称:招聘的岗位名称,如“前端开发”、“数据分析师”等。公司名称:招聘公司的名称。薪资待遇:职位的薪资范围,通常以“面议”、“10k-20k”这样的形式表示。工作地点:公司所在的城市及具体地址。公司福利:例如五险一金、带薪年假、绩效奖金等。发布时间:职位信息的发布时间。一个典型的招聘页面 URL 格式通常如下:在这个页面上,职位信息会分页展示,爬虫需要模拟翻页,获取多个页面的招聘信息。

2201_76125261的博客 1292

Java-BufferedOutputStream介绍

BufferedOutputStream是Java IO库中的一个类,它代表了一个带缓冲区的输出流。它继承自OutputStream类,并提供了一些额外的方法和功能来增强输出流的性能。与普通的OutputStream相比,BufferedOutputStream在写入数据时使用了一个中间缓冲区。当向BufferedOutputStream写入数据时,数据首先会被写入到缓冲区,而不是直接写入到目标输出流。

架构师之路。。 2499

Pytorch CIFAR10图像分类 EfficientNet v1篇

EfficientNet源自Google Brain的论文EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. 从标题也可以看出,这篇论文最主要的创新点是. 论文提出了,混合缩放,把网络缩放的三种方式:深度、宽度、分辨率,组合起来按照一定规则缩放,从而提高网络的效果。EfficientNet在网络变大时效果提升明显,把精度上限进一步提升,成为了当前最强网络。

风信子的猫Redamancy的快乐星球 1852

BufferedOutputStream类的详解(画图分析)

首先看一个BufferedOutputStream 可以这么理解,BufferedOutputStream类就是对FileInputStream类的加强。它是一个加强流。为什么成为加强流?就是因为这个加强流在进行输出时会在内存中开辟一块缓冲区。因为缓冲区在内存中的读写速度很快,以此来达到提升输出流的效率 参考:缓冲流帮助理解 ...

qq_44828283的博客 5881

obdumper和obloader迁移OceanBase业务库(一):实施手册

⭐️ 要求导出一致性数据时,建议在导出数据前,手动触发一次合并,在合并成功后再重新导出数据。:统计业务数据库下的所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…:检查业务数据库下的所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…:统计单个模式下所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…如果单张表的数据量太大,会导出为多个文件,文件命名会加上数字后缀。该过程会导出所有表的定义、以及定义在表上的索引定义。如果有多种数据库对象,会导出到不同的子路径下。

Sebastien23的博客 1028

基于STM32+华为云设计的智慧农业灌溉系统(2023升级版)(158)

本项目设计一种基于STM32的智慧农业监测系统。该系统能够检测空气温度、湿度、光强度和土壤湿度等关键指标,并自动调节浇水量,实现作物生长环境的精细化管理。同时,本项目还支持本地LCD屏幕数据显示和通过ESP8266上传数据到华为云物联网平台,同时搭建流媒体服务器实现摄像头远程监控。最重要的是,本项目将利用Qt开发Android手机APP,使用户可以远程查看监测情况,了解农作物生成情况。

1万+

Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream

原文 Java IO流学习总结三:缓冲流-BufferedInputStream、BufferedOutputStream 继承关系图 InputStream |__FilterInputStream |__BufferedInputStream 首先抛出一个问题,有了InputStream为什么还要有BufferedInputStream? BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterOu

ss810540895的博客 1296

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BufferedOutputStream、OutputStream和ObjectOutputStream常用流操作类

定义:是Java I/O流中的一个抽象类,是所有字节输出流的父类。功能:它提供了基本的字节输出操作,允许将字节数据写入到目标(如文件、内存、网络等)。所有具体的输出流类(如、等)都继承自。用途:主要用于处理字节数据的输出操作,是其他输出流类的基础。示例代码:java复制 2. 定义:是的一个装饰类,用于对其他输出流进行缓冲处理。功能:它在底层输出流的基础上增加了一个缓冲区,通过缓冲区来优化写入操作的性能。数据首先写入缓冲区,当缓冲区满了或者调用方法时,数据才会被批量写入到目标流中。用

Vic10101的博客 1423

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Linux】Java文件IO之普通IO与Buffer IO

在Java中,输入输出(IO)操作是编程中一项重要的任务。无论是从外部文件中读取数据,还是向文件写入数据,或者是与用户进行交互,都需要用到IO操作。

morris 4万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java.io包中常用的类

Java.io包 Java.io.BufferedInputStream类实例 Java.io.BufferedOutputStream类使用例子 Java.io.BufferedReader类 Java.io.BufferedWriter类 Java.io.ByteArrayInputStream类 Java.io.ByteArrayOutputStream类 Java.io.Ch

GarfieldEr007的专栏 3289

Java IO包之缓冲Buffer输入输出流

Java IO包之缓冲Buffer输入输出流 什么是缓冲Buffer 它是内存空间的一部分,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分空间就叫做缓冲区,缓冲区是具有一定大小的 为啥要用缓冲 缓冲,缓和冲击,例如操作磁盘比内存慢的很多,所以不用缓冲区效率很低 数据传输速度和数据处理的速度存在不平衡,比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两个事件,用buffer暂存起来,变成每10秒写一次硬盘,数据可以直接送往缓冲区,高速设备

ruan_luqingnian的博客 2478

白话Java缓冲流(BufferedInputStream,BufferedOutputStream)

白话缓冲流(BufferedInputStream,BufferedOutputStream)1. 什么是流1.1 读写(复制)文件案例2. 什么是缓冲流2.1 缓冲流的作用。2.1.1 缓冲流的逻辑。2.1.2 输入缓冲流案例:2.1.3 输出缓冲流案例(复制文件): 看了整个优快云,关于缓冲流的文章基本都是模糊不清,晦涩难懂或者复制粘贴的。 这里做一个简单的分享,以免面试的时候被问到那可就阴沟里翻船了。 🍅你的点赞是我分享的动力🍅 其实大多数Java开发人员在工作中很少会接触的IO流。可面试偏

易柏州的博客 2797

BufferedOutputStream

BufferedOutputStream 介绍 继承父亲的成员方法 java.io.OutputStream 这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。 定义了一些子类共性的成员方法: 1.public abstract void write(int b)throws IOException 将指定的字节写入此输出流。 write的一般合同是将一个字节...

tangshuai96的博客 2261

java io BufferedOutputStream源码分析

目录 简介 字段buf,count,2个构造函数 两个flush方法,两个write方法 简介 package java.io; /** * 该类实现缓冲输出流。 * 通过建立一个这样的输出流,应用程序可以将很多字节一次写入到依赖的输出流,而不必为每个写入的字节调用依赖的输出流的write方法。 * * @author Arthur van Hoff * @since JDK1.0 */ public class BufferedOutputStream extends Fi

今天吃了吗的博客 245

java中常用io流 BufferedInputStream和BufferedOutputStream

BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。   这是摘录自API文档中的 BufferedInputStream 

j_a_v_a_guan的博客 868

(IO流类示例三)BufferedOutputStream、BufferedInputStream、DataOutputStream、DataInputStream

BufferedOutputStream(输入流)、BufferedInputStream(输出流):缓冲字节输入输出流(高级流),高级流都需要低级流的支持,在其内部维护了一个默认大小为8k的缓冲区,当我们在进行文件复制读取内容时,会将读取到的内容先写入缓冲区中,当缓冲区满了,会一次性将数据写到硬盘上,如果我我们设置的字节数组大小大于缓冲区默认大小,则缓冲区失效,直接从硬盘上进行读取,如果我们设置...

z774884795的博客 2253
上一篇: Java日看一类(2)之IO包中的BufferedInputStream类
下一篇: Java 日看一类(4)之IO包中的BufferedReader类
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值