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()与read(byte[] b) 用法介绍

这两个方法在抽象类InputStream中都是作为抽象方法存在的, JDK API中是这样描述两者的: read() :  从输入流中读取数据的下一个字节,返回0到255范围内的int字节值。如果...

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

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

【IO】InputStream的read(byte[] b)方法

1、从运行结果可以看出: (1)InputStream中的read(byte[] b)方法是:从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。 (2)...

BufferedInputStream如何缓冲IO以及InputStream中的read(byte[] b) 是否具有缓冲功能?

今天做IO练习的时候,注意到了File

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

Java学习之InputStream中read()与read(byte[] b)    这两个方法在抽象类InputStream中都是作为抽象方法存在的,       JDK API中是这样描述两者的...

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

read()与read(byte[] b)这两个方法在抽象类InputStream中前者是作为抽象方法存在的,后者不是,JDK API中是这样描述两者的: 1:read() : 从输入流中...
  • snihcel
  • snihcel
  • 2012年08月21日 20:38
  • 19842

定义一个文件输入流,使用read(byte[] b)方法,将a.txt文件中的内容打印出来

package cn.edu.jit.test; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; impo...
  • qian_ch
  • qian_ch
  • 2017年02月19日 15:55
  • 648

io读取的输入输出,InputStream ,OutputStream 的read(),write()方法的详细介绍

今天复习io 流 遇到一些问题,分享一下,有关字节的读取,输入操作。 import java.io.IOException; import java.io.InputStream; import j...

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

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

InputStream read()方法

InputStream read()方法写在前面最近在做android串口通信遇到了问题,业务的思路是这样的,android通过串口向主板发送数据,主板接收到数据之后,将数据放回,android再根据...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:InputStream中read()与read(byte[] b) 用法介绍
举报原因:
原因补充:

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