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

我不是很明白这个方法,解释是这样的“读取输入流中的字节数部分,并将其存储在缓冲区数组b”。但我还是不怎么明白这个方法。方法不是对象调用它,然后传入参数,返回数据吗?这里传... 我不是很明白这个方法,解释是这样的“读取输入流中的字节数部分,并将其存储在缓冲区数组b”。但我还是不怎么明白这个方法。方法不是对象调用它,然后传入参数,返回数据吗?这里传入是的是一个byte[]数组,返回类型是int类型。但是为什么能把方法外定义的byte[]数组的内容改变了?我很疑惑的地方就是这里,一直想不通诶。请前辈们指点迷津一下,不胜感激!!! 展开
 我来答
pieryon
2015-06-24 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166868
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部

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();  

        }  

    }  

}  

运行结果:

loving4rong
2014-09-23 · 超过28用户采纳过TA的回答
知道答主
回答量:153
采纳率:0%
帮助的人:55.9万
展开全部

以下为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;
    }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dark19861201
2014-09-23 · TA获得超过2152个赞
知道大有可为答主
回答量:2584
采纳率:79%
帮助的人:1788万
展开全部
这个是JAVA api里面的内部实现呀,就是他读文件的时候,先把文件流放到你传入的byte数组里面,byte数组是引用类型,他在往里面放东西,byte数组内容当然就改变了,至于返回什么类型,那就是方法随便定义的呀,他返回一个int类型起始就是告诉你文件有没有读取完毕啦,你再仔细看看API说明
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱吃溜肥肠
2014-09-23 · TA获得超过627个赞
知道小有建树答主
回答量:326
采纳率:50%
帮助的人:219万
展开全部
其实,这个byte[]数组相当于工地上的搬运车,把一堆砖块从一个地方转移到另一个地方,用到这个车一次一次的搬运;每次给车装满才能往另一个地方搬运,如果车装满了,返回值为-1;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
没钱RU18FW74
2014-09-23 · TA获得超过2589个赞
知道答主
回答量:182
采纳率:0%
帮助的人:58.4万
展开全部
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。
希望能解决您的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式