java-socket文件传输用inputstream.read带buffer详解
目录
java socket文件传输用inputstream.read(带buffer)详解
本文参考了以下文章:
1、
2、
3、
首先看一下文件传输为什么用read(带buffer)而不是直接用read()的原因:
InputStream读取流有三个方法,分别为read(),read(byte[] b),read(byte[] b, int off, int len)。其中read()方法是一次读取一个字节,所以效率是很低的….所以不用
- 然后就是read(带buffer)用法详解了
public int read(byte[] b,
int off,
int len)
throws IOException
参数:
b - 读入数据的缓冲区。
off - 在其处写入数据的数组 b 的初始偏移量。
len - 要读取的最大字节数。
返回:
读入缓冲区的总字节数,如果由于已到达流末尾而不再有数据,则返回 -1。
抛出:
IOException - 如果发生 I/O 错误。
NullPointerException - 如果 b 为 null。
- 1、将输入流中最多 len 个数据字节读入字节数组。尝试读取多达 len 字节,但可能读取较少数量。以整数形式返回实际读取的字节数。
- 2、在输入数据可用、检测到流的末尾或者抛出异常前,此方法一直阻塞。
- 3、如果 b 为 null,则抛出 NullPointerException。
- 4、如果 off 为负,或 len 为负,或 off+len 大于数组 b 的长度,则抛出 IndexOutOfBoundsException。
- 5、将读取的第一个字节存储在元素 b[off] 中,下一个存储在 b[off+1] 中,依次类推。读取的字节数最多等于 len。让 k 为实际读取的字节数;这些字节将存储在元素 b[off] 至 b[off+k-1] 之间,其余元素 b[off+k] 至 b[off+len-1] 不受影响。