Java InputStream.read()如何读取数据流字节并存储到缓冲区数组呢?
下文笔者讲述java代码读取数据流字节及存储的方法分享,如下所示:
.read(byte[] b) 这个方法是先规定一个数组长度
实现思路: 我们可借助以下方法,即可实现数据流读取 public abstract int read() public int read(byte[] b) public int read(byte[] b,int off,int len) 参数说明 b:存储读入数据的缓冲区; off:数组b中将写入数据的初始偏移量 len:要读取的最大字节数 返回值说明 读入缓冲区的总字节数 当到达流末尾而不再有数据可用,则返回-1 异常抛出: IOException:当不是因为流位于文件末尾而无法读取第一个字节 当输入流已关闭;如果发生其他 I/O 错误。 NullPointerException:当b为null IndexOutOfBoundsException:当off为负数,则len为负数,或len为b.length-off例:
read()这个方法是对这个流一个一个字节的读,返回的int就是这个字节的int表示方式
public static void main(String[] args){ InputStream in = new FileInputStream("d:\\java265.txt"); byte[] arr = new byte[15]; while( in.available() != 0) { for(int i = 0; i & lt; 15; i++) { arr[i] = (byte) in .read(); } } String str = new String(arr, "utf-8"); System.out.println(str); in.close(); } /* 以上代码从输入流中读取数据的下一个字节 返回0到255范围内的int字节值 当读取已经到达流末尾而没有可用的字节,则返回-1 在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞 */
.read(byte[] b) 这个方法是先规定一个数组长度
将这个流中的字节缓冲到数组b中
返回的这个数组中的字节个数
这个缓冲区没有满的话,则返回真实的字节个数
到未尾时都返回-1
public static void main(String[] args){ InputStream in = new FileInputStream("d:\\java265.txt"); byte[] bytes = new byte[1024]; int b; while((b = in.read(bytes)) != -1) { String s = new String(bytes, "utf-8"); System.out.println(s); } in.close(); } /* 从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中 以整数形式返回实际读取的字节数 在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞 当b的长度为0,则不读取任何字节并返回 0 否则,尝试读取至少一个字节 当流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中 将读取的第一个字节存储在元素 b[0] 中,下一个存储在 b[1] 中 依次类推。读取的字节数最多等于b 的长度 设 k 为实际读取的字节数;这些字节将存储在 b[0] 到 b[k-1] 的元素中,不影响 b[k] 到b[b.length-1] 的元素 */
read(byte[] b, int off, int len) 此方法其实就是多次调用了read()方法
public static void main(String[] args){ InputStream in = new FileInputStream("d:\\java265.txt"); byte[] bytes = new byte[ in .available()]; int z; while((z = in.read(bytes, 0, bytes.length)) != -1) { String s = new String(bytes, "utf-8"); System.out.println(s); } in.close() } /* 1.将输入流中最多 len 个数据字节读入 byte 数组。 尝试读取 len 个字节,但读取的字节也可能小于该值 以整数形式返回实际读取的字节数。 2.在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。 3.如果 len 为 0,则不读取任何字节并返回 0 否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1; 否则,至少读取一个字节并将其存储在 b 中。 4.将读取的第一个字节存储在元素 b[off] 中,下一个存储在 b[off+1] 中,依次类推。 读取的字节数最多等于 len。设k为实际读取的字节数; 这些字节将存储在 b[off] 到 b[off+k-1] 的元素中,不影响 b[off+k] 到 b[off+len-1] 的元素 */
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。