InputStream类中的三种read方法-学习中有发现了一个重要知识惊喜

记一次InputStream流读取不完整留下的惨痛教训 首先,问问大家下面这段流读取的代码是否存在问题呢?try {// 根据inputStream的长度创建字节数组// 调用read 读取字节数组}实际上的确是有问题的,而且在线上环境结结实实的坑了我们一把。在代码编写过程中,available()方法仅用于估算接收数据的总长度或数据块的长度,不要用于任何需要准确计算的场合,更不要用于开辟一个可以刚好容纳所有数据的缓冲区。对于调用InputStream.read(…),务必进行循环调用,直至返回-1,无论输入数据源是网络数据还是本地文件。 阅读详情

转载:https://baijiahao.baidu.com/s?id=1607485209716859447&wfr=spider&for=pc

InputStream类以及子类中的Read方法

Read方法

Read()

public abstract int read() throws IOException

从(来源)输入流中(读取的内容)读取数据的下一个字节到(去处)java程序内部中

返回值为0到255的int类型的值,返回值为字符的ACSII值(如a就返回97,n就返回110).

如果没有可用的字节,因为已经到达流的末尾, -1返回的值

运行一次只读一个字节,所以经常与while((len = inputstream.read()) != -1)一起使用

read(byte [] b )

public int read(byte[] b) throws IOException

从(来源)输入流中(读取内容)读取的一定数量字节数,并将它们存储到(去处)缓冲区数组b中

返回值为实际读取的字节数

运行一次读取一定的数量的字节数.java会尽可能的读取b个字节,但也有可能读取少于b的字节数.至少读取一个字节

第一个字节存储读入元素b[0],下一个b[1],等等。读取的字节数是最多等于b的长度。

如果没有可用的字节,因为已经到达流的末尾, -1返回的值

如果b.length==0,则返回0

read( byte [] b , int off , int len)

public int read(byte[] b, int off, int len, throws IOException)

读取 len字节的数据从输入流到一个字节数组。

试图读取多达 len字节,但可能读取到少于len字节。返回实际读取的字节数为整数。

第一个字节存储读入元素b[off],下一个b[off+1],等等。读取的字节数是最多等于len。k被读取的字节数,这些字节将存储在元素通过b[off+k-1]b[off],离开元素通过b[off+len-1]b[off+k]未受影响。

read(byte[]b)就是相当于read(byte [] b , 0 , b.length).所以两者差不多.性质一样

为什么read()无参方法读取一个字节,返回的是一个int类型,而不是一个byte类型?

因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111(文件的底层按补码来存储的)

那么这11111111是byte类型的-1,我们的程序是遇到-1就会停止不读了,后面的数据就读不到了,所以在读取的时候用int类型接收,如果11111111会在其前面补上24个0凑足4个字节,那么byte类型的-1就变成int类型的255了这样可以保证整个数据读完,而结束标记的-1就是int类型

文章来自https://blog.youkuaiyun.com/qq_37835596/article/details/76559572

InputStream的三种read方法 先来看一段程序 import java.io.*; public class InputStreamReadTest { public void inputStreamRead1() throws IOException{ InputStream is = new FileInputStream("F:\\test.txt"); OutputStream os = new FileO 阅读详情

相关推荐

InputStream类available和read方法可能读取不到完整的流数据

1、问题描述 项目需要一个将网络流InputStream转换为byte[]数组的方法,于是从网上找了下面的方法: private byte[] toByteArray(InputStream input) throws IOException { byte[] buffer = new byte[(int) in.available()]; in.read(buffer)

jilindaxue的博客 6244

InputStream的read方法

InputStream此抽象类是表示字节输入流的所有类的超类。 我们从输入流中读取数据最常用的方法基本上就是如下3个read()方法了: 1、 read()方法,这个方法从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。 2、read(byte[] b,int off,int ...

baidu_38284985的博客 1万+

SAP中成本估算没有找到工艺路线消息处理实例

在针对成品的标准成本核算处理过程中,系统中会经由设定好的策略来收集成品相关成本组成,最终计算出产成品的标准成本。关于成本组成,可以归纳为三个基本要素,料,工,费。即标准成本就是要知道,生产一件成品,需要消耗多少钱的原材料?消耗多少钱的人工?以及其它的间接消耗? 某日,接到CO同事的反馈,在用CK11N做产成品标准价格核算时,提示没有工艺路线确定,但该消息为绿灯,可以通过。基于业务上的谨慎,提出分析。 从提示可以看出问题与工艺路线有关。因为,成品工艺路线中设定有成品生产所耗工时,所以,在计算产成品标准

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 6277

慎用InputStream的read()方法

InputStream 此抽象类是表示字节输入流的所有类的超类。           我们从输入流中读取数据最常用的方法基本上就是如下 3 个 read() 方法了:          1 、 read () 方法,这个方法 从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1 。       

The more effort ,the more lucky 4206

告别手动群发!用IDA Pro和CE搞定企业微信4.1.38.6011的HOOK开发(附完整代码)

本文详细介绍了如何利用IDA Pro和Cheat Engine进行企业微信4.1.38.6011的HOOK开发,实现自动化群发功能。从逆向工程环境配置、关键函数定位到HOOK框架设计,提供完整代码示例,帮助企业提升运营效率。

weixin_42533120的博客 478

squidpy 教程 2:利用 Scanpy 和 Squidpy 进行空间数据的可视化分析

本教程详细介绍了如何利用Squidpy和Scanpy对空间转录组数据进行可视化分析。通过将Scanpy处理得到的聚类结果映射回原始组织图像,并结合基因表达与空间邻域信息,帮助研究者直观揭示细胞类型分布、基因表达模式及空间相互作用,从而深入挖掘空间组学数据的生物学意义。

weixin_29081703的博客 446

InputStream read()方法详解

在Java7中,InputStream被定义为一个抽象类,相应的,该类下的read()方法也是一个抽象方法,这也就意味着必须有一个类继承InputStream并且实现这个read方法。   查阅Java7 API,我们可以看到,在InputStream中定义了三个重载的read()方法:   但是在这三个方法中,只有参数列表为空的read方法定义为抽象方法,这也就意味着在直接继承自InputStream的所有子类中,必须重写这个方法。下面我们来看看这个方法的介绍:   这里有两点需要注意:一是这个方法的返回

to_real的博客 7010

如何读懂CiteSpace图谱?科研小白必看的节点颜色/年轮/聚类解读手册

本文详细解析CiteSpace图谱的核心视觉元素,包括节点颜色、年轮和聚类标识,帮助科研人员准确解读数据分析结果。通过生物医学案例展示如何从图谱中识别关键文献和研究趋势,提供五步系统解读法和常见错误规避策略,助力科研小白快速掌握文献计量分析技巧。

weixin_29179311的博客 313

InputStream.read([byte[]) 详解

InputStream.read([byte[]) 详解 一、一次读取文件字节流 1、ServletInputStream inputStream = request.getInputStream(); 2、byte[] buffer = new byte[1024]; 3、int read = inputStream.read(buffer); 4、System.out.println(read); 5、new String(buffer,0,read); 6、System.out.println(new

a1290320893的博客 5643

使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序

上一篇文章中,我们简要介绍了ROS中action的基本知识,为了控制真实机械臂,我们已经修改了moveit配置文件,使得moveti启动后具备一个control_msgs::FollowJointTrajectoryAction类型的action客户端,接下来,我们完成该类型action的另一半,编写C++程序来实现action的服务端。由于底层机器人控制程序一般差别都很大,这里展示的只是编程要点...

爱学习的草莓熊 1万+

【YOLO11改进 - 检测头】Detect_LSCD检测头:量化的检测头,进一步提升模型的检测效率和精度

【YOLO11改进 - 检测头】Detect_LSCD检测头:量化的检测头,进一步提升模型的检测效率和精度

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 4094

InputStream类中的三种read方法

Read方法 Read() public abstract int read() throws IOException 从(来源)输入流中(读取的内容)读取数据的下一个字节到(去处)java程序内部中 返回值为0到255的int类型的值,返回值为字符的ACSII值(如a就返回97,n就返回110). 如果没有可用的字节,因为已经到达流的末尾, -1返回的值 运行一次只读一个字节,所以经常...

JIANGTAO11111的博客 3597

apollo-减速带通行

主车在通过减速带时速度不超过3m/s

是菜鸟o的博客 387

字节流操作:InputStream类 读取文件的操作(三种 read 方法)

读取英文字符的时候,按照一个一个字节读出来的,打印的结果,是英文字符所代表的 ASCII码。读取中文字符的时候,按照字节读取,结果以十六进制的形式表示,可以证明,是 UTF-8 字符集 中所表示的汉字。其实,文件内容操作,就那么几个步骤打开文件操作文件中的内容(读或者写),关闭文件在实际开发过程当中,这三种read方法需要根据具体的情况来进行使用。这篇博客,主要是讲解 使用字节流操作:InputStream类 读取文件的操作(三种 read 方法)。

2301_80934700的博客 1935

YOLOv11改进 | 损失函数改进篇 | MPDIoU、InnerMPDIoU助力细节涨点(二次创新 + 代码解析)

本文为读者详细介绍了YOLOv11模型的最新改进,带来的改进机制是最新的损失函数MPDIoU和融合了最新的Inner思想的InnerMPDIoU(效果打爆之前的所有的损失函数提升检测精度和处理细节方面的作用。通过深入探讨MPDIoU和InnerMPDIoU(全网首发)的工作原理和实际代码实现,本文旨在指导读者如何将这些先进的损失函数技术应用到YOLOv11模型中,以提高其性能和准确性。文章内容涵盖从理论基础、代码实现,到实际教你如何添加本文的机制到你的模型中。

Snu77的博客 4021

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JAVA IO流 (一) InputStream的read方法

read() read(byte [] b ) read( byte [] b , int off , int len) 代码示例 为什么read()无参方法读取一个字节,返回的是一个int类型,而不是一个byte类型? 在Java8中,InputStream被定义为一个抽象类,相应的,该类下的read()方法也是一个抽象方法,这也就意味着必须有一个类继承InputStream并且实...

Aluluyao的博客 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【JAVA学习笔记】InputStream.read()三种方法解析

Read的三种方法 API reference: https://docs.oracle.com/javase/7/docs/api/ Read() 返回int值,0-255。 每次从数据源读取一个byte并返回。 read方法每次读取8哥二进制位(所谓一个byte字节。字节是十进制0-255之间的一个整数),所以read就是从数据源读取一个8位二进制数(一个byte),将这个byte转换为十进制整数然后返回)。 Read(byte[] b) 3. 返回int值,表示读取的字节数。 4. 使用一个byt

weixin_42627346的博客 6816

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

InputStream中的三个read方法

/** Reads the next byte of data from the input stream. The value byte is * returned as an int in the range 0 to * 255. If no byte is available because the end of the stream * has been r

greenpearl的专栏 3004

Java中的InputStream中的read()方法返回参数问题

对于InputStream中的read()方法,当传入的参数的值不同的时候,方法的返回值也不同 1. read(byte b[])需要传入byte数组作为参数的时候 当传入byte数组时,read方法会返回一个int型的整数,该整数读入的数据在数组中的长度 public static void main(String[] args)throws Exception{ InputSt...

weixin_43938560的博客 7764

InputStream read()方法

InputStream read()方法写在前面最近在做android串口通信遇到了问题,业务的思路是这样的,android通过串口向主板发送数据,主板接收到数据之后,将数据放回,android再根据返回的数据,判断反馈的信息时候正确。InputStream 输入流使用InputSteam输入流来接收从主板返回的数据,代码如下: private class ReadThread extends Th

momolele的博客 2266

InputStream的read()方法

InputStream此抽象类是表示字节输入流的所有类的超类。          我们从输入流中读取数据最常用的方法基本上就是如下3个read()方法了:         1、 read()方法,这个方法从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。         2、read(byte[] b,int o...

pec0105的博客 1万+

InputStream类中read方法读取文件时遇见的乱码问题

InputStream类中read方法读取文件时遇见的乱码问题 在F:\123\problems文件夹内手动新建一个文本:a1.txt。输入"中文测试"4个中文。 用OutputStream创建名称为a.txt的文件,向里面写入数据"中文测试"4个中文。 try (FileOutputStream fos = new FileOutputStream("F:\\123\\problems\\a...

weixin_42328539的博客 1313

android InputStream中read()与read(byte[] b)

今天,简单讲讲android里的  InputStream的read()读取文件的使用。     这两个方法在抽象类InputStream中都是作为抽象方法存在的,        JDK API中是这样描述两者的:   read() :  从输入流中读取数据的下一个字节,返回0到255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回-1。在输入数据可用、

谢岩的博客 1万+

InputStream方法详解

字节输入流的基础类InputStream和OutputStream有许多相同的地方,也有许多不同点,需注意区分。 概要 与OutputStream相比,这个抽象类定义的方法要多一些。读入数据有些时候的确比较麻烦。读入数据的时候,需要判断数据源是否有数据,是否结束等等一些情况,相对复杂。这个抽象类定义了一个抽象方法read(),实现了Closeable接口。先看一下定义的一些方法: 首先是三个

Spring , Hadoop, Spark , BI , ML 2万+
上一篇: JavaWeb开发$.ajax如何向后台传输数据
下一篇: 什么是RESTful API?
周末去看海
博客等级 码龄9年 50粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值