Java InputStream.read()如何读取数据流字节并存储到缓冲区数组呢?

java-教程王 Java教程 发布时间:2021-11-29 17:39:21 阅读数:17184 1
下文笔者讲述java代码读取数据流字节及存储的方法分享,如下所示:
实现思路:
    我们可借助以下方法,即可实现数据流读取
    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] 的元素 
*/
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202111/1918.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者