Java 日看一类(6)之IO包中的ByteArrayInputStream类

2025华为od机试真题B卷【版本管理】JavaScript实现 在 软件版本管理中,版本号由点分割的数字组成,例如 1.2.3 和 2.8。现在,你需要编写一个函数,计算两个版本号之间的可用版本号个数。这里的可用版本号指的是所有满足 version1<x<version2的版本号x的个数。若 version1 >=version2 返回0., 阅读详情

引入包和继承关系:

无引入包

继承InputStream类





类作用注释如下:

/**
 * A <code>ByteArrayInputStream</code> contains
 * an internal buffer that contains bytes that
 * may be read from the stream. An internal
 * counter keeps track of the next byte to
 * be supplied by the <code>read</code> method.
 * <p>
 * Closing a <tt>ByteArrayInputStream</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
 * @see     java.io.StringBufferInputStream
 * @since   JDK1.0
 */

大意如下:

ByteArrayInputStream类包含一个缓冲区用来储存可能被输入流读取的byte数据

内置的记数标记保证缓冲内下一个byte可以被read方法读取

关闭ByteArrayInputStream是毫无作用的,这个方法在这个类中的流已经被关闭后可以被调用(不产生IO异常)





含有四个变量:

byte缓冲区:

protected byte buf[];

读取指针:

protected int pos;

标记点:

protected int mark = 0;

当前有效长度:(缓冲区使用长度)

protected int count;





含有十个方法:

构造方法(从头拷贝一个byte数组):

public ByteArrayInputStream(byte buf[]) {
    this.buf = buf;
    this.pos = 0;
    this.count = buf.length;
}

构造方法(获得部分byte长度数组,实质拷贝全部,但读取指针不指向数组头):

public ByteArrayInputStream(byte buf[], int offset, int length) {
    this.buf = buf;
    this.pos = offset;
    this.count = Math.min(offset + length, buf.length);//数组长度和实际需拷贝最大指针位中的较小值
    this.mark = offset;
}

从输入缓冲区中读取数据(一个数组单元数据),返回被读取单元的byte码:

public synchronized int read() {
    return (pos < count) ? (buf[pos++] & 0xff) : -1;
}

从输入缓冲区读取数据(批量读取),返回实际读取长度:

public synchronized int read(byte b[], int off, int len) {//off为起始读取位置,len为读取长度
    if (b == null) {//判定数组有效性
        throw new NullPointerException();
    } else if (off < 0 || len < 0 || len > b.length - off) {
        throw new IndexOutOfBoundsException();//数组越界检查
    }

    if (pos >= count) {//缓冲区读取完
        return -1;
    }

    int avail = count - pos;//未读有效数据
    if (len > avail) {
        len = avail;
    }
    if (len <= 0) {
        return 0;
    }
    System.arraycopy(buf, pos, b, off, len);
    pos += len;
    return len;
}

跳过后面n个单元读取:

public synchronized long skip(long n) {
    long k = count - pos;
    if (n < k) {//判定是否跳出有效值区间
        k = n < 0 ? 0 : n;
    }

    pos += k;
    return k;
}

返回当前剩余有效值:

public synchronized int available() {
    return count - pos;
}

检查是否支持标记操作:

public boolean markSupported() {
    return true;
}

标记当前位置:

public void mark(int readAheadLimit) {
    mark = pos;
}

重置标记:

public synchronized void reset() {
    pos = mark;
}

关闭流(毫无作用):

public void close() throws IOException {
}






ByteArrayInputStream类似于BufferedInputStream,但是结构要更为简单:直接读入输入的byte数组,但初始化后就不能向缓冲区添加数据,数据没有动态刷新功能。在数据量小时较为好用。




玩转Docker小游戏项目系列: Docker部署红心纸牌网页小游戏 阅读详情

相关推荐

别再只怪贴片厂了!从MLCC内部裂纹,看懂物料质量与工艺应力的博弈

本文深入分析了MLCC内部裂纹的失效原因,提供了从裂纹形态学到生产全流程的失效风险地图的完整分析框架。通过实战案例和检测技术组合,帮助工程师精准锁定MLCC失效背后的真凶,优化物料质量和工艺应力管理。

weixin_33122947的博客 293

Java字节流:ByteArrayInputStream ByteArrayOutputStream

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

dianzhenluo3164的博客 5206

不只是驱动:拆解AIC8800 WiFi模组在RK Android系统的完整启动链(从DTS到HAL)

本文深入解析了AIC8800 WiFi模组在RK Android系统中的完整启动链,从设备树(DTS)配置到HAL层适配,涵盖驱动移植、固件加载及用户空间服务协同等关键环节。通过详细的技术分析和调试技巧,帮助开发者解决RK平台与AIC8800模组的兼容性问题,优化WiFi子系统性能。

weixin_30439067的博客 492

字节输入流(InputStream)与字节输出流(OutputStream)

怎么确定输入输出的方向?   字节流输入输出的方向是以Java为标准的。我们可以把文件和Java虚拟机之间想象成有一条通道。数据在通道中流通,这就有了输入流和输出流。当程序要读取文件的时候,调用程序把文件传入java虚拟机,这是输入流;当程序要向文件写入数据的时候,数据就会从Java虚拟机中流向文件,这就是输出流。 字节输入流(InputStream)   InputStreams是Java标准库提供的最基本的输入流,位于java.io包里。它不是一个具体的类或者接口,而是一个抽象类。同时它是所有字节输入

阿波的博客 2329

指纹对抗指南:如何绕过Cloudflare与Akamai的5s盾与浏览器指纹检测

现在的CDN反爬技术虽然越来越强,但是道高一尺魔高一丈,只要掌握了指纹伪造、流量伪装、行为模拟这些核心技术,就可以绕过绝大多数的防护措施。对抗过程中要注意效率和成本的平衡,小规模爬取用Playwright+stealth最方便,大规模爬取用curl_cffi+代理池性价比最高,遇到验证码用打码平台或者自动识别服务,不需要死磕破解。本文介绍的方案已经在实战中验证过,可以绕过95%以上的Cloudflare/Akamai防护,成功率非常高。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 299

蓝凌EIS智慧协同平台frm_form_upload.aspx接口存在任意文件上传漏洞

蓝凌EIS智慧协同平台frm_form_upload.aspx接口存在任意文件上传漏洞

nnn2188185的博客 357

byte[]和InputStream的相互转换

1、byte[]转换为InputStream InputStream sbs = new ByteArrayInputStream(byte[] buf); 2、InputStream转换为InputStreambyte[] ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); byte[] buff = new byte[...

farxix的博客 1万+

模型预测控制(MPC)解析(二):单输入单输出系统

在上一篇中,为了便于说明,预测控制系统采用单输入单输出系统为例进行设计。由于系统模型使用的是状态空间方程,于是可以很容易的将这种设计方法可以扩展到多输入、多输出系统。

行者无疆的博客 8226

ByteArrayInputStream

asd

qq_37593817的博客 4478

YOLOv8改进 | 主干篇 | 利用MobileNetV1替换Backbone(轻量化网络结构)

本文给大家带来的改进机制是MobileNetV1,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。这些模型基于简化的架构,并利用深度可分离卷积构建轻量级深度神经网络,其引入了两个简单的全局超参数,用于在延迟和准确性之间进行有效的权衡。实验表明,MobileNets在资源和准确性的权衡方面表现出色,并在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中展现了其有效性,这个模型非常适合轻量化的读者来使用。适用检测目标:轻量化网络结构适合轻量化的读者。

Snu77的博客 3967

上位机图像处理和嵌入式模块部署(qmacvisual入门)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 虽然我们前面学习了很多的知识点,比如说在windows这边,用qt写界面,用opencv写图像处理代码;在linux这边先用树莓派测试,最后再部署到自己的平台上面。但是,对于一个商业软件是怎么运行的,很多时候我们心理还是没有底,或者说,自己写的软件距离一个商业软件还有多远,大部分学习的同学是不知道的。 就算有的同学说,这个时候可以借鉴一下vision pro,或者是

嵌入式-老费,一个分享专业嵌入式知识的blog 1234

22.文件读写:字节流

字节流最大的特点是,每次调用read或write读入或写出的数据是以字节为单位的,而有的字符需要两个字节去存储,所以字节流读取数据会发生读到的数据不准确的情况。

c1776167012的博客 4793

《网络摄像机实战⑦:嵌入式端AWS KVS IoT SDK 库编译与测试全流程-君正/瑞芯微/全志(超详细指南)》

本文介绍了AWS音视频和物联网解决方案的核心组件与集成方法。主要内容包括:1)Amazon Kinesis Video Streams(KVS)提供的WebRTC托管服务,支持实时音视频流传输与双向交互;2)AWS IoT云服务实现设备连接与集成;3)详细说明了KVS WebRTC库的编译过程,包括源代码下载、CMake配置和依赖库生成;4)KVS Producer库的集成方法,重点阐述了存储空间调整和mbedtls版本适配等关键修改点。文章为开发者提供了AWS音视频和物联网服务的技术实现指南,特别针对嵌入

lvj_158的专栏 110

Java.io.ByteArrayInputStream类

java.io.ByteArrayInputStream类包含包含可从流中读取的字节的内部缓冲器。内部计数器保持下一个字节的读法提供的轨道。以下是关于ByteArrayInputStream类重要的几点: 关闭ByteArrayInputStream类没有任何效果。 在这个类中的方法可以在流已关闭后,而被调用不会产生一个IOException。 更多教程请访问http://www.manongzj.com 类的声明 以下是java.io.ByteArrayInputStr..

wuxiaopengnihao1的博客 1876

IMSL CNL 7.0.0 (x86-64)Crack

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java IO流操作(FileInputStream、ByteArrayInputStream、ObjectInputStream)

一、介绍 java的IO流操作主要分为字节流和字符流,每个流都会有输入和输出两种类型的流。所有的字节流类都继承自InputStream 和 OutputStream 这两个抽象类,而所有的字符流类是都继承自Reader 和 Writer 这两个抽象类。字节流的处理单位是字节,通常用来处理二进制文件,如音乐、图片文件等。而字符流的处理单位是字符,通常来处理文本。对流进行操作之后,...

qq_36511401的博客 1万+

VC中sqlite的使用

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

JAVA基础 | IO之ByteArrayOutputStream与ByteArrayInputStream

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

小郭的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JAVA中的ByteArrayInputStream

Java中的ByteArrayInputStream类是一个字节数组输入流,它允许我们以字节的形式读取字节数组。作用:创建一个ByteArrayInputStream对象,使用buf作为其缓冲区数组,并从offset位置开始读取length个字节。参数:buf为字节数组,offset为缓冲区数组的初始位置,length为从初始位置开始读取的字节数。作用:从输入流中读取最多len个字节的数据到字节数组b中,从off位置开始存储。返回值:返回读取的字节,如果已到达流末尾,则返回-1。返回值:剩余的字节数。

qa3629723的博客 5424

java.io中的read方法详解(尤其在数组流即在ByteArrayInputStream中)

一、我们知道现在具体需要了解的是ByteArrayInputStream中的read方法那我们先来认识一下这个数组流java.lang.Object 继承者 java.io.InputStream 继承者 java.io.ByteArrayInputStreampublic class ByteArrayInputStreamextends InputStreamByteArra

lmm0513的博客 1万+

Java IO流之ByteArrayInputStream分析

简介     ByteArrayInputStream是字节数组输入流,在内存中创建了一个字节数组,将输入流中读取的数据保存到字节数组的缓存区中.也就是说字节数组输入流将读取数据放到字节数组缓冲区中.     1.ByteArrayInputStream构造方法有两个: public ByteArrayInputStream(byte buf[]) {} public ByteArrayI...

梦悠哉的博客 1万+

ByteArrayInputStream 类详解

它允许将内存中的字节数组当作输入流来读取,是处理内存数据的常用工具。是 Java 中用于。

weixin_51288065的博客 1384

java IO笔记(ByteArrayInputStream/ByteArrayOutputStream)

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

moonfish0607的博客 3269

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

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

6528

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

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

Oscar Chen 4668

ByteArrayInputStream类

一、说明 哈哈,这是学习Java之路的第一篇博文。虽然说接触学习Java有一段时间了,但是对流的概念一直并不是很清楚。也看了很多资料,但是感觉还是非常的抽象很难去理解。但是流又是Java中很重要的一部分,所以就决定花点时间好好弄一下。这篇文章也并非全部是我的原创文章,我浏览了写的比较好的博客,将其修改添加,加上一些自己的看法,就当成自己学习的笔记。仅供学习参考。参考原文链接 二、Byte...

weixin_30807779的博客 529

Java IO(六):ByteArrayInputStream的使用

ByteArrayInputStream允许开发者将字节数组作为输入流来读取,严格来说,ByteArrayInputStream不需要关闭,因为它不持有系统资源,但为了良好的编程习惯,建议还是关闭它。

欧阳方超的专栏 890

JAVA_IO_ByteArrayOutputStream与ByteArrayInputStream(三)

ByteArrayInputStream ByteArrayInputStream 继承自 InputStream  包含一个内部缓冲区,其中包含可以从流中读取的字节。 内部计数器跟踪read方法要提供的下一个字节。 关闭ByteArrayInputStream没有任何效果(调用close方法)。 在关闭流之后,可以调用此类中的方法,而不生成IOException 。   ...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值