java中,ImputStream类中的read(byte []b)方法

2024-12-02 17:22:24
推荐回答(5个)
回答1:

read(byte[] b) :  
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。如果 b 的长度为 0,则不读取任何字节并返回 0;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有可用的字节,则返回值 -1;否则,至少读取一个字节并将其存储在 b 中。将读取的第一个字节存储在元素 b[0] 中,下一个存储在 b[1] 中,依次类推。读取的字节数最多等于 b 的长度。设 k 为实际读取的字节数;这些字节将存储在 b[0] 到 b[k-1] 的元素中,不影响 b[k] 到 b[b.length-1] 的元素。 

举例说明一下:

/** 

 * User: liuwentao 

 * Time: 12-1-25 上午10:11 

 */  

public class InputStreamTest2 {  

    public static void main(String[] args){  

        String path = "D:\\project\\opensouce\\opensouce_demo\\base_java\\src\\demo\\java\\inputstream\\";  

        File file = new File(path + "xuzhimo.txt");  

        InputStream inputStream = null;  

        int i=0;  

        try {  

            inputStream = new FileInputStream(file);  

            byte[] bytes = new byte[16];  

            while ((i = inputStream.read(bytes))!=-1){  

                String str = new String(bytes);  

                System.out.print(str);  

            }  

        }catch (FileNotFoundException e) {  

            e.printStackTrace();  

        } catch (IOException e) {  

            e.printStackTrace();  

        }  

    }  

}  

运行结果:

回答2:

以下为read(byte buffer)方法的源代码:


此read(byte[] buffer) 方法调用下面的read(byte[] buffer, int offset, int length)方法

 public int read(byte[] buffer) throws IOException {
        return read(buffer, 0, buffer.length);
    }
 public int read(byte[] buffer, int offset, int length) throws IOException {
        Arrays.checkOffsetAndCount(buffer.length, offset, length);
        //length的长度为buffer.length,也就是字节数组的长度
        for (int i = 0; i < length; i++) {
            int c;
            //c==-1说明读到结尾了 方法return
            try {
                if ((c = read()) == -1) {
                    return i == 0 ? -1 : i;
                }
            } catch (IOException e) {
                if (i != 0) {
                    return i;
                }
                throw e;
            }
            //不等于-1 就把这个c赋值给这个字节数组的的一个对应的索引,然后强制转换成char类型
            //c是一个字符对应的assic码值
            buffer[offset + i] = (byte) c;
        }
        return length;
    }

回答3:

这个是JAVA api里面的内部实现呀,就是他读文件的时候,先把文件流放到你传入的byte数组里面,byte数组是引用类型,他在往里面放东西,byte数组内容当然就改变了,至于返回什么类型,那就是方法随便定义的呀,他返回一个int类型起始就是告诉你文件有没有读取完毕啦,你再仔细看看API说明

回答4:

其实,这个byte[]数组相当于工地上的搬运车,把一堆砖块从一个地方转移到另一个地方,用到这个车一次一次的搬运;每次给车装满才能往另一个地方搬运,如果车装满了,返回值为-1;

回答5:

从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
希望能解决您的问题。