三个read方法区别

read(byte[] b)与read(byte[] b)的区别
2009-08-03 18:39
BufferedInputStream类有三个read方法


public int read()
         throws IOException
从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。如果因为已经到达流末


尾而没有字节可用,则返回 -1。在输入数据可用、检测到流末尾或抛出异常之前,此方法将一直阻塞。
此方法只执行 in.read() 并返回结果。


指定者:
类 InputStream 中的 read
返回:
下一个数据字节;如果已到达流末尾,则返回 -1。
抛出:
IOException - 如果发生 I/O 错误。
public int read(byte[] b,int off,int len)throws IOException
从此字节输入流中给定偏移量处开始将各字节读取到指定的 byte 数组中。
此方法实现了 InputStream 类相应 read 方法的常规协定。另一个便捷之处在于,它将通过重复地调用


底层流的 read 方法,尝试读取尽可能多的字节。这种迭代的 read 会一直继续下去,直到满足以下条


件之一:


已经读取了指定的字节数,
底层流的 read 方法返回 -1,指示文件末尾(end-of-file),或者
底层流的 available 方法返回 0,指示将阻塞后续的输入请求。
如果第一次对底层流调用 read 返回 -1(指示文件末尾),则此方法返回 -1。否则此方法返回实际读


取的字节数。
鼓励(但不是必须)此类的各个子类以相同的方式尝试读取尽可能多的字节。


覆盖:
类 FilterInputStream 中的 read
参数:
b - 目标缓冲区。
off - 开始存储字节处的偏移量。
len - 要读取的最大字节数。
返回:
读取的字节数;如果已到达流末尾,则返回 -1。
抛出:
IOException - 如果已经调用其 close() 方法关闭了此输入流,或者发生 I/O 错误
public int read(byte[] b) throws IOException


从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前,此方法将阻


塞。


此方法只执行 read(b, 0, b.length) 调用并返回结果。注意到它不 执行 in.read(b) 很重要;


FilterInputStream 的某些子类依赖于实际使用的实现策略。


覆盖:


类 InputStream 中的 read


参数:


b - 存储读取数据的缓冲区。


返回:


读入缓冲区的字节总数,如果因为已经到达流末尾而没有更多的数据,则返回 -1。


抛出:


IOException - 如果发生 I/O 错误。


另请参见:


read(byte[], int, int)


这时注意了:
read(byte[] b,int off,int len)是重复调用read()方法从给定偏移量处开始(一般为0)尝试读取尽


可能多的字节,最多能读取的字节数由len指定,并返回实际的读取字节数,在读取过程中,如果遇到文


件末尾则返回-1.
read(byte[] b)函数则调用的是read(byte[] b,int off,int len)函数,同时将b,0,b.length做为参数


传递给read(byte[] b,int off,int len)函数。这个函数没有调用read()函数重复读取。
他们的区别在于read(byte[] b,int off,int len)灵活的指定偏移量开始处,指定长度,read(byte[] 


b)则指定的固定的偏移量与长度,他们最重要的是read(byte[] b,int off,int len)调用的是read()方


法重复完成读取输入流,read(byte[] b)是调用的read(byte[] b,int off,int len)函数读取输入流。
我没有看源码,只是从API中找到他们的区别所以只能总结到这么深,也是给自己留个笔记。
我碰到的问题在write(byte[] b)与write(byte[] b,int off,int len)上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值