InputStream中read()与read(byte[] b) 用法介绍

转载 2015年07月11日 10:15:08

read() :  从输入流中读取数据的下一个字节,返回0到255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回-1。在输入数据可用前此方法阻塞,检测到流末尾或者抛出异常此方法结束。

read(byte[] b) : 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。在输入数据可用前此方法阻塞,检测到流末尾或者抛出异常此方法结束。

如果 b 的长度为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。

将读取的第一个字节存储在元素 b[0] 中,下一个存储在 b[1] 中,依次类推。读取的字节数最多等于 b 的长度。设 k 为实际读取的字节数;这(www.111cn.net)些字节将存储在 b[0] 到 b[k-1] 的元素中,不影响 b[k] 到 b[b.length-1] 的元素。

 

由帮助文档中的解释可知,read()方法每次只能读取一个字节,所以也只能读取由ASCII码范围内的一些字符。这些字符主要用于显示现代英语和其他西欧语言。而对于汉字等unicode中的字符则不能正常读取。只能以乱码的形式显示。(说的好像不对吧,read(byte[] b)好像也不能保证读取的字节数是偶数)

对于read()方法的上述缺点,在read(byte[] b)中则得到了解决,就拿汉字来举例,一个汉字占有两个字节,则可以把参数数组b定义为大小为2的数组即可正常读取汉字了。当然b也可以定义为更大,比如如果b=new byte[4]的话,则每次可以读取两个汉字字符了,但是需要注意的是,如果此处定义b 的大小为3或7等奇数,则对于全是汉字的一篇文档则不能全部正常读写了。


public int read(byte[] b)
         throws IOException
Reads some number of bytes from the input stream and stores them into the buffer array b. The number of bytes actually read is returned as an integer. This method blocks until input data is available, end of file is detected, or an exception is thrown.

If the length of b is zero, then no bytes are read and 0 is returned; otherwise, there is an attempt to read at least one byte. If no byte is available because the stream is at the end of the file, the value -1 is returned; otherwise, at least one byte is read and stored into b.

The first byte read is stored into element b[0], the next one into b[1], and so on. The number of bytes read is, at most, equal to the length of b. Let k be the number of bytes actually read; these bytes will be stored in elements b[0] through b[k-1], leaving elements b[k] through b[b.length-1] unaffected.

The read(b) method for class InputStream has the same effect as:

 read(b, 0, b.length) 

Parameters:
b - the buffer into which the data is read.
Returns:
the total number of bytes read into the buffer, or -1 is there is no more data because the end of the stream has been reached.
Throws:
IOException - If the first byte cannot be read for any reason other than the end of the file, if the input stream has been closed, or if some other I/O error occurs.
NullPointerException - if b is null.

基于java的InputStream.read(byte[] b,int off,int len)算法学习!

public int read(byte[] b, int off, int len) throws IOException...
  • Fingter
  • Fingter
  • 2006年08月29日 11:20
  • 8151

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

read()与read(byte[] b)这两个方法在抽象类InputStream中前者是作为抽象方法存在的,后者不是,JDK API中是这样描述两者的:  1:read() :  从输入流中...
  • u014538198
  • u014538198
  • 2014年12月23日 10:00
  • 111

java.io.InputStream.read(byte[] b, int off, int len)

java.io.InputStream.read(byte[] b, int off, int len) 方法从输入流读取转换为字节数组数据达到len个字节。如果参数len为0,则读取任何字节并返回0...
  • u010486124
  • u010486124
  • 2014年06月10日 16:28
  • 1058

InputStream类中read(byte[])和read(byte, int offset, int length)

read(byte[])方法会尝试读取与给定字节数组容量一样大的字节数,返回值说明了已经读取过的字节数。如果InputStream内可读的数据不足以填满字节数组,那么数组剩余的部分将包含本次读取之前的...
  • jzpkzm
  • jzpkzm
  • 2015年12月04日 15:06
  • 1556

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

今天,简单讲讲android里的  InputStream的read()读取文件的使用。     这两个方法在抽象类InputStream中都是作为抽象方法存在的,        ...
  • bzlj2912009596
  • bzlj2912009596
  • 2018年01月09日 08:51
  • 54

Java基础之InputStream中read()与read(byte[] b)

这两个方法在抽象类InputStream中都是作为抽象方法存在的,        JDK API中是这样描述两者的:   read() :  从输入流中读取数据的下一个字节,返回0到...
  • weixin_38303684
  • weixin_38303684
  • 2017年09月23日 11:39
  • 50

深入理解read(byte[] b)与readFully(byte[] b)

要搞清楚read(byte[] b)和readFully(byte[] b)的区别,可以从以下方面着手分析: 1.代码的具体实现 2.方法何时返回 3.字节是以什么方式在网络上传输的 1.read...
  • cleanness
  • cleanness
  • 2014年01月20日 19:23
  • 1511

Java学习之InputStream中read()与read(byte[] b)

read() :  从输入流中读取数据的下一个字节,返回0到255范围内的int字节值。如果因为已经到达流末尾而没有可用的字节,则返回-1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。...
  • zhengluootc
  • zhengluootc
  • 2016年03月20日 15:58
  • 88

FileInputStream 之read(byte [] b)方法

FileInputStream是InputStream的子类,由名称上就可以知道, FileInputStream主要就是从指定的File中读取资料至目的地。 FileOutputStream是...
  • studyvcmfc
  • studyvcmfc
  • 2012年07月08日 23:02
  • 10557

java inputStream之read、available

1. 关于InputStream.read()      在从数据流里读取数据时,为图简单,经常用InputStream.read()方法。这个方法是从流里每次只读取读取一个字节,效率会非常低。  ...
  • Alps__
  • Alps__
  • 2014年12月26日 19:02
  • 1277
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:InputStream中read()与read(byte[] b) 用法介绍
举报原因:
原因补充:

(最多只允许输入30个字)