java socket文件传输用inputstream.read(带buffer)详解

本文参考了以下文章:
1、 基于java的InputStream.read(byte[] b,int off,int len)算法学习!
2、java InputStream读取数据问题
3、java的输入输出流总结

- 首先看一下文件传输为什么用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] 不受影响。

你可能感兴趣的:(Java)