开发者社区> 问答> 正文

IO流的使用问题:报错

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样,这是为什么?

展开
收起
kun坤 2020-06-07 21:58:09 483 0
1 条回答
写回答
取消 提交回答
  • 难道是因为,网络问题,无法1下读太多数据?

    ######

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

    ######

    感觉方法一好一些呢

    ######回复 @染墨若流云 : 暂时没有######回复 @够劲儿 : 那你有什么好办法没######方法1读的数组时对的,不过1个个读有点慢。######

    引用来自“yongk”的评论

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

    嗯,我对比了下,两个byte[]不相同,第2个也不能读满。

    2020-06-07 21:58:13
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
多IO线程优化版 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载