★★★关于InputStream.read(byte[] b)方法★★★

问题描述

我研究了一下read(byte[]b)方法,官方的解释如下从输入流中读取一定数量的字节并将其存储在缓冲区数组b中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。如果b为null,将抛出NullPointerException。如果b的长度为0,则无字节可读且返回0;否则,要尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值-1;否则,至少可以读取一个字节并将其存储在b中。将读取的第一个字节存储在元素b[0]中,下一个存储在b[1]中,依次类推。读取的字节数最多等于b的长度。让k为实际读取的字节数;这些字节将存储在元素b[0]至b[k-1]之间,不影响元素b[k]至b[b.length-1]。如果不是因为流位于文件末尾而无法读取读取第一个字节,则抛出IOException。特别是,如果输入流已关闭,则抛出IOException。我的理解是,如果b.length>0得情况下,这个read(byte[]b)方法只可能返回-1或者>0得正整数。兄弟们,这个理解正确吗?

解决方案

解决方案二:
这个read不是有个返回值么?这个值表示从byte的0位置开始往里塞了多少个字节。
解决方案三:
建议看英文的文档中文的翻译大多时候都是怪怪的
解决方案四:
引用1楼bao110908的回复:

这个read不是有个返回值么?这个值表示从byte的0位置开始往里塞了多少个字节。

我想知道什么情况下面返回0,我看api得说明的意思是如果byte[]b这个变量的length是0得时候,就返回0其他不可能返回0

时间: 2024-09-17 07:01:30

★★★关于InputStream.read(byte[] b)方法★★★的相关文章

InputStream 的read(byte[] d)方法读取内容出现重复读取,这是为什么?

问题描述 InputStream的read(byte[]d)方法读取内容出现重复读取,这是为什么? 解决方案 解决方案二:有没有用到skip()方法?如果用到了,实际上是skip的问题解决方案三:你是怎么读的,请贴出代码!解决方案四:谢谢各位帮忙,已经解决了解决方案五:这是代码:StringBufferbuffer=newStringBuffer();byte[]b=newbyte[2048];InputStreamin=newInputStream(filename);while(in.rea

socket通信inputStream.read(byte)读取速度小于接收速度,导致多帧数据叠加在一起。

问题描述 在socket通信中,由于inputStream.read(byte)是尽可能的读byte[]大小的数据,当服务端发送数据速度大于客户端读取数据的速度时,就会出现客户端读到多帧连在一起的报文.而这些发送数据,读取数据的速度是未知的.怎么解决这个问题,服务器端不能改变, 解决方案 解决方案二:想办法将读取的后续动作的耗时降低.比如读取动作只负责读取,读取的内容传给多线程进行处理.解决方案三:没用.....解决方案四:想到了一个办法,把所有读的数据放到一起,不管每次读的是多少,放在所接收数

java int转byte和long转byte的方法_java

在网络编程中,出于节约带宽或者编码的需要,通常需要以原生方式处理long和int,而不是转换为string. public class ByteOrderUtils { public static byte[] int2byte(int res) { byte[] targets = new byte[4]; targets[3] = (byte) (res & 0xff);// 最低位 targets[2] = (byte) ((res >> 8) & 0xff);// 次低

Blob、InputStream、byte[] 互转

在我们的程序开发当中,经常会用到java.sql.Blob.byte[].InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们之间互换的util. 一.byte[]=>Blob 我们可以通过Hibernate提供的表态方法来实现如: org.hibernate.Hibernate.Hibernate.createBlob(new byte[1024]); 二.Blob=>byte[] 目前没有找到好一点的API提供,所以

inputStream的read(b)方法

问题描述 我写了一个服务器,做了一个输入流的线程,用in.read(b)读取流内容,但是运行一段时间后这个方法一直不停返回-1,一般来说没有数据来这个方法不是会阻塞吗,这是一种什么情况? 解决方案 解决方案二:读取到末尾而没有可用字节会返回-1解决方案三:返回-1说明已经读完数据了,可以停止read操作了!解决方案四:关键是一个字节都没读到,而且客户端好像也没发数据过来解决方案五:引用3楼cailinj的回复: 关键是一个字节都没读到,而且客户端好像也没发数据过来 没发过来读当然什么都没读到解决

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

http://blog.csdn.net/snihcel/article/details/7893097 read()与read(byte[] b)这两个方法在抽象类InputStream中前者是作为抽象方法存在的,后者不是,JDK API中是这样描述两者的:  1:read() : 从输入流中读取数据的下一个字节,返回0到255范围内的int字节值.如果因为已经到达流末尾而没有可用的字节,则返回-1.在输入数据可用.检测到流末尾或者抛出异常前,此方法一直阻塞.  2:read(byte[] b

分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)

原文:分享非常有用的Java程序(关键代码)(八)---Java InputStream读取网络响应Response数据的方法!(重要)   Java InputStream读取数据问题 ====================================================================== 原理讲解  1. 关于InputStream.read()      在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方法是从流里每

Java解析网络数据流的三种特殊方法

Java作为最开放的语言,已越来越受到网络程序员的青睐.但这一青睐族有着同样的经历--曾经都为网络上通信的Java数据格式而烦脑. 笔者也不例外,曾经为此而查阅了很多文档,经过反复测试才 得以解决,如今笔者已经在所从事的很多电子政务项目中顺利的应用.今天笔者写此文,介绍用Java解析网络数据的三种特殊方法,希望对正在寻求这方面问题答案的读者有所帮助. UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式.

Java使用ByteArrayOutputStream 和 ByteArrayInputStream 避免重复读取配置文件的方法_java

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