Java 日看一类(7)之IO包中的ByteArrayOutputStream类

ByteArrayOutputStream 类详解 的输出流(ByteArrayOutputStream和ByteArrayInputStream是节点流),位于。它不需要关联物理文件或网络连接,所有数据都存储在内存的字节数组中。是 Java 中用于。 阅读详情

所引入的包和继承关系:

引入java.util.Arrays文件

继承自OutputStream类





类的作用注释:

/**
 * This class implements an output stream in which the data is
 * written into a byte array. The buffer automatically grows as data
 * is written to it.
 * The data can be retrieved using <code>toByteArray()</code> and
 * <code>toString()</code>.
 * <p>
 * Closing a <tt>ByteArrayOutputStream</tt> has no effect. The methods in
 * this class can be called after the stream has been closed without
 * generating an <tt>IOException</tt>.
 *
 * @author  Arthur van Hoff
 * @since   JDK1.0
 */
大意如下:

这个类是一个输出流接口,会把数据写入到byte数组中。

缓冲区会自动增长,添加数据。

数据可以通过“toByteArray”和“toString”方法进行格式转换

关闭ByteArrayOutputStream是无效的。

close方法在这个类中只能在流已经被关闭后调用(不抛出IO异常)





这个类含有三个成员变量:

缓冲区:

protected byte buf[];

缓冲区有效长度:

protected int count;

最大数组长度:

private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;


含有十五个方法:

构造函数(默认大小缓冲区):

public ByteArrayOutputStream() {
    this(32);
}

构造函数(构造特定大小缓冲区):

public ByteArrayOutputStream(int size) {
    if (size < 0) {
        throw new IllegalArgumentException("Negative initial size: "
                                           + size);
    }
    buf = new byte[size];
}

确认缓冲区容量是否够用:

private void ensureCapacity(int minCapacity) {
    // overflow-conscious code
    if (minCapacity - buf.length > 0)//不够就增加缓冲区大小
        grow(minCapacity);
}

增大缓冲区容量:

private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = buf.length;
    int newCapacity = oldCapacity << 1;//新容量为旧容量2倍
    if (newCapacity - minCapacity < 0)//新容量小于最小需要容量
        newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)//新容量超出系统数组所能容纳最大值(Int型)
        newCapacity = hugeCapacity(minCapacity);
    buf = Arrays.copyOf(buf, newCapacity);//引入包内容
}

大容量判定(返回一个合适的容量值):

private static int hugeCapacity(int minCapacity) {
    if (minCapacity < 0) // overflow
        throw new OutOfMemoryError();
    return (minCapacity > MAX_ARRAY_SIZE) ?
        Integer.MAX_VALUE :
        MAX_ARRAY_SIZE;
}

写入缓冲区(单个值):

public synchronized void write(int b) {
    ensureCapacity(count + 1);//判定数组容量是否够用
    buf[count] = (byte) b;
    count += 1;
}

写入缓冲区(数组形式写入):

public synchronized void write(byte b[], int off, int len) {
    if ((off < 0) || (off > b.length) || (len < 0) ||//判定数组下标有效性
        ((off + len) - b.length > 0)) {
        throw new IndexOutOfBoundsException();
    }
    ensureCapacity(count + len);//判定容量大小是否够用
    System.arraycopy(b, off, buf, count, len);
    count += len;
}

将缓冲区内容写入输出流:

public synchronized void writeTo(OutputStream out) throws IOException {
    out.write(buf, 0, count);
}

重置缓冲区:

public synchronized void reset() {
    count = 0;
}

检查缓冲区内容(以Byte数组形式):

public synchronized byte toByteArray()[] {
    return Arrays.copyOf(buf, count);
}

获得当前缓冲区有效大小:

public synchronized int size() {
    return count;
}

检查缓冲区内容(以字符串形式):

public synchronized String toString() {
    return new String(buf, 0, count);
}

检查缓冲区内容(字符串形式,特定字符集编码):

public synchronized String toString(String charsetName)
    throws UnsupportedEncodingException
{
    return new String(buf, 0, count, charsetName);
}

检查缓冲区内容(字符串形式,该String构造函数早已过时,我也不知道这个方法现在有啥用):

public synchronized String toString(int hibyte) {
    return new String(buf, hibyte, 0, count);
}


(作者目前使用的JDK1.8)

关闭流(没啥用,和ByteArrayInputStream类相同):

public void close() throws IOException {
}




ByteArrayOutputStream仍是比ByteArrayInputStream简单,但相对于一般的OutputStream,由于其加入了缓冲区检测机制,所以功能会更为强大,准确率也更高。



扫地机器人自动回充技术大揭秘:红外、蓝牙、雷达哪种更适合你家? 本文深入解析扫地机器人自动回充技术的三种主流方案:红外、蓝牙和雷达/LiDAR,详细比较它们的原理、优缺点及适用场景。红外技术成本低但易受干扰,蓝牙穿透性好但精度随距离降低,雷达精度最高适合复杂环境。根据户型大小和家居环境,提供选购建议,帮助用户选择最适合自己家庭的自动回充方案。 阅读详情

相关推荐

高通ISP模块全解析:从Raw到JPEG的18个关键处理步骤(附避坑指南)

本文全面解析高通ISP模块从Raw到JPEG的18个关键处理步骤,涵盖原始数据预处理、色彩科学处理链、画质增强与降噪等核心环节。通过实战调优经验,揭示ISP架构中的技术原理与工程实践要点,帮助开发者避免常见问题,提升移动影像处理质量。

weixin_30399155的博客 361

Java 8 中 ByteArrayOutputStream 类源码分析

ByteArrayOutputStream 类位于 java.io 包下,继承于 OutputStream 类,从字面上可以看出,它表示的是一个字节数组输出流,它的实现方式是先在内存中创建一个字节数组缓冲区 `byte buf[]`,然后把所有发送到输出流的数据保存于字节数组缓冲区中...

ranxiaotop的博客 1984

基于 LSTM 的船舶轨迹预测,单步预测

基于 LSTM 的船舶轨迹预测,单步预测

fyuhao的博客 1万+

Java字节流:ByteArrayInputStream ByteArrayOutputStream

----------------------------------------------------------------------------------- ByteArrayInputStream 类声明:public class ByteArrayInputStream extends InputStream位于java.io包下官方对其说明:  A ByteArra...

dianzhenluo3164的博客 5206

产品经理如何运用AI提升工作效率

AI技术的应用为产品经理的工作流程带来了显著的效率提升。从需求收集到产品上线,AI可以在多个阶段提供智能化支持,帮助产品经理更好地理解用户需求、优化产品设计、提高开发和测试效率。在未来,随着AI技术的不断发展,产品经理将能够更加高效地管理产品生命周期,为用户提供更优质的产品体验。应用 | AI + 千行百业欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

不想宅的冷同学 1339

GSEA富集分析实战:从数据准备到结果解读的完整R代码指南

本文提供了一份完整的GSEA富集分析实战指南,涵盖从R环境准备、数据质量控制到基因ID转换、参数优化和结果解读的全流程。通过详细的R代码示例和实用技巧,帮助研究人员高效完成基因集富集分析,特别针对生物信息学中常见的GSEA分析痛点提供了专业解决方案。

weixin_29246195的博客 537

(每日持续更新)jdk api之ByteArrayOutputStream基础、应用、实战

将指定的字节写入此输出流。将指定字节数组中从偏移量off开始的len个字节写入此输出流。将此输出流的所有内容写入指定的输出流out。重置此输出流,以便再次使用它而无需创建新的字节数组。创建一个新分配的字节数组。其大小是此输出流的当前大小,内容是当前输出流的拷贝。int size()返回此输出流的当前大小。将此输出流的内容转换为一个字符串,使用平台的默认字符集。将此输出流的内容转换为一个字符串,使用指定的字符集。关闭此输出流并释放与此流关联的所有系统资源。

a89879193的专栏 2万+

【云原生进阶之容器】第六章容器网络6.6.2--Cilium部署

部署Cilium非常简单,可以通过单独的yaml文件部署全部组件(目前我使用了这个方式部署了1.7.1版本),也可以通过Helm Chart一键完成。重要的是部署环境和时机:官方建议所有部署节点都使用Linux最新稳定内核版本,这样所有的功能都能启用。作为一个Kubernetes网络组件,它应该在部署Kubernetes其他基础组件之后,才进行部署。

junbaozi的专栏 795

Java之IO--字节内存流(ByteArrayInputStream与ByteArrayOutputStream)

本文介绍Java的字节内存流的用法。

IT利刃出鞘的博客 3429

【C++】构造函数之初始化列表(Initialization list of constructors)

本讲主要是构造函数的初始化列表的讲节,但是本节很重要,可以关乎后面写项目

m0_62599305的博客 2235

MATLAB 图像滤波:高通、低通、带通和方向滤波器

在 MATLAB 中,我们可以使用不同类型的滤波器对图像进行处理,包括高通滤波器、低通滤波器、带通滤波器和方向滤波器。通过以上代码示例,我们介绍了 MATLAB 中使用高通滤波器、低通滤波器、带通滤波器和方向滤波器对图像进行滤波的方法。高斯滤波器可以实现带通滤波效果,通过调整滤波器的方差参数可以控制带通滤波器的频率范围。这里的平均滤波器是一种常见的低通滤波器,通过对图像周围的像素进行平均来实现平滑效果。Sobel 滤波器是一种常用的方向滤波器,用于检测图像中的水平和垂直边缘。函数将高通滤波器应用于图像。

CyberSparkZ的博客 1396

ByteArrayOutputStream详解

介绍: ByteArrayOutputStream 对byte类型数据进行写入的类 相当于一个中间缓冲层,将类写入到文件等其他outputStream。它是对字节进行操作,属于内存操作流 源码解析: public class ByteArrayOutputStream extends OutputStream { } 从上述代码中可以看出ByteArrayOutputStream继承了Out...

WeiLGHui 6万+

用R来做一个临床研究亚组分析的森林图

在编程语言里R语言最强大的功能是做图功能,我们知道在做Meta分析的时候会需要做森林图,实际上我们在很多临床研究中也经常看到森林图,主要是亚组分析的森林图,比如下面这篇文章里的一个森林图: 今天就教教大家怎么用R语言来做上面这种亚组分析的森林图 1. 在Excel里编辑好数据,按照下面的格式整理,保存为csv格式 2. 下载安装R跟Rstudio R软件的下载地址: https://mirrors.tuna.tsinghua.edu.cn/CRAN/ Rstudio下

Mrrunsen的博客 5344

Java ByteArrayOutputStream类的使用

1. ByteArrayOutputStream使用说明 字节数组输出流在内存中创建一个字节数组缓冲区,所有发送到输出流的数据保存在该字节数组缓冲区中。创建字节数组输出流对象有以下几种方式。 下面的构造方法创建一个32字节(默认大小)的缓冲区。 OutputStream bOut = new ByteArrayOutputStream(); 另一个构造方法创建一个大小为n字节的缓冲区。 Outp...

不见其长,日有所长 8884

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JAVA基础 | IO之ByteArrayOutputStream与ByteArrayInputStream

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例

小郭的博客 1万+

数学建模模型总结

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

ByteArrayOutputStream类用法以及ByteArrayOutputStream.toByteArray()方法实例

ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区, 然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。 在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。如下将变量a ...

起一个大家都能记得的名字 博客 8669

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java ByteArrayOutputStream toByteArray()方法(带示例)

ByteArrayOutputStream类toByteArray()方法 (ByteArrayOutputStream Class toByteArray() method) toByteArray() method is available in java.io package. toByteArray()方法在java.io包中可用。 toByteArray() method is use...

cumubi7552的博客 9350

java IO笔记(ByteArrayInputStream/ByteArrayOutputStream)

今天讲的是ByteArrayInputStream流和ByteArrayOutputStream流。 首先让我们来看看ByteArrayOutputStream的源码: ByteArrayOutputStream.java package java.io; import java.util.Arrays; public class ByteArrayOutputStream extend

moonfish0607的博客 3269

Java IO流之ByteArrayOutputStream分析

简介 ByteArrayOutputStream是字节数组输出流,在内存中创建了一个字节数组,所有发送到输出流的数据都会保存到该字节数组的缓冲区中.     1.ByteArrayOutputStream的构造方法: public ByteArrayOutputStream() {} public ByteArrayOutputStream(int size) {} 第一个构造方法默认创...

梦悠哉的博客 8451

Java中的ByteArrayOutputStream

Java中的ByteArrayOutputStream

一起coding,一起嗨。 2347

Java IO: ByteArrayOutputStream使用

感谢原文作者:小思思smile 原文链接:https://blog.youkuaiyun.com/u014049880/article/details/52329333/ 在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长。 可使用toByteArray()和toString()获取数据。 关闭ByteArrayOutputStream无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException 在网络传输中我们.

Jason的学习笔记 1724

Java IO操作——内存操作流{ByteArrayInputStream、ByteArrayOutputStream)

ByteArrayInputStream和ByteArrayOutputStream 之前的程序中,输出输入都是从文件中来的,当然,也可以将输出的位置设置在内存之上。此时就要使用ByteArrayInputStream、ByteArrayOutputStream来完成输入、输出的功能了。 ByteArrayInputStream的主要功能是完成将内容写入到内存之中,而ByteArrayOutp

6528

JAVA中的数组流ByteArrayOutputStream

是一个非常有用的类,它允许我们在内存中构建字节数组,无需与文件系统或其他外部设备进行交互。这使得它非常适合于需要动态构建字节数组的情况,例如网络通信中的数据包构建、字符串到字节数组的转换等。作用:创建一个新分配的字节数组,其大小是此输出流的当前大小,并且缓冲区的有效内容已复制到该数组中。是一个字节数组输出流,它允许应用程序以字节的形式写入数据到一个字节数组缓冲区中。作用:将此字节数组输出流的全部内容写入指定的输出流参数中。返回值:一个包含此字节数组输出流所有内容的字节数组。,其缓冲区大小是 32 字节。

qa3629723的博客 6907

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

Java_io体系之ByteArrayInputStream、ByteArrayOutputStream简介、走进源码及示例——04

Java_io体系之ByteArrayInputStream、ByteArrayOutputStream简介、走进源码及示例——04 一:ByteArrayInputStream   1、       类功能简介: 字节数组输入流:此流中内部包含一个缓存字节数组做为缓存区、该缓存字节数组中的字节组成了供ByteArrayInputStream读取到程序中的流。既然要将缓存字

Oscar Chen 4668

java io ByteArrayOutputStream源码分析

简介 package java.io; import java.util.Arrays; /** * 这个类实现了一个输出流,其中数据被写入字节数组中。 * 当数据写入缓冲区时,缓冲区会自动增长。 * 可以使用toByteArray()和toString()获得数据。 * <p> * 关闭ByteArrayOutputStream没有任何效果。 * 该类中的方法可以在流被关闭后调用,而无需生成IOException。 * * @author Arthur van Hof

今天吃了吗的博客 414
上一篇: Java 日看一类(6)之IO包中的ByteArrayInputStream类
下一篇: Java 日看一类(8)之IO包中的CharArrayReader类
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值