IO流的使用问题

发布于 2021-12-03 20:51:12 字数 754 浏览 781 评论 6

socket连接读取字节,

方法一:

public static byte[] readByteSources(InputStream in, int length) throws IOException {
    // 由于网络问题,数据可能不能即使到达
    ByteArrayOutputStream baout = new ByteArrayOutputStream();
    // 缓冲区2的倍数,64k
    byte[] buff = new byte[1];
    int len = 0;
    long count = 0;
    while ((len = in.read(buff)) != -1) {
        count += len;
        baout.write(buff, 0, len);
        if (count >= length) {
            break;
        }
    }

    return baout.toByteArray();
}

方法二: 

public  static  byte[] readIn(InputStream in,int length)throws IOException{
        byte[] buff = new byte[length];
        in.read(buff);
        return buff ;
}

 

 两个方法接收到的数组值不1样,这是为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

画骨成沙 2021-12-08 17:23:49

引用来自“yongk”的评论

方法二写的有问题,buff缓冲区长度是length,但in.read(buff)并不一定能把buff读满就返回了。所以跟方法一就不一样了。

半世蒼涼 2021-12-08 15:33:41

方法1读的数组时对的,不过1个个读有点慢。

青萝楚歌 2021-12-08 15:25:22

回复
那你有什么好办法没

左岸枫 2021-12-08 15:17:47

感觉方法一好一些呢

皇甫轩 2021-12-08 07:38:50

方法二写的有问题,buff缓冲区长度是length,但in.read(buff)并不一定能把buff读满就返回了。所以跟方法一就不一样了。

疾风者 2021-12-07 18:41:19

难道是因为,网络问题,无法1下读太多数据?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文