加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 更快的read()或read(byte,offset,length)的InputStream

发布时间:2020-12-15 08:40:07 所属栏目:Java 来源:网络整理
导读:我正在为 Android编写一个使用Socket的InputStream的应用程序.我试图通过这种方式从pc发送文件到android.文件的大小几乎是40kb,在android上我发现它一次只能读取2kb的数据,所以我正在以块的形式阅读它. 我有两种读取字节的方法 1) while((d=inputStream.read
我正在为 Android编写一个使用Socket的InputStream的应用程序.我试图通过这种方式从pc发送文件到android.文件的大小几乎是40kb,在android上我发现它一次只能读取2kb的数据,所以我正在以块的形式阅读它.

我有两种读取字节的方法

1)

while((d=inputStream.read())>=0)
{
    imgData[i]=(byte)d;
    i++;
    if(i>=40054)
    {
        // do the further processing here like saving it on disk.
        i=0;
    }
}

2)

while(inputStream.read(byte,2048)>=0)
{
    //merge this byte to buffer here... 
    i=i+2048;
    if(i>=40054)
    {
        // do the further processing here like saving it on disk.
        i=0;
    }
}

形成这两种方法,在性能方面会更快?

解决方法

第二,可能是很长的路要走.一次读取一个块几乎总是比一次读取一个字节更好,除非你真的只想读取一个字节.

但是,您的代码目前已被破坏,因为除了检查已读取的内容之外,您没有考虑读取的返回值.它可能没有读取2048字节.你应该使用类似的东西:

int bytesRead;

while ((bytesRead = inputStream.read(buffer,buffer.length)) > 0)
{
    // Use bytesRead here
}

有了这个代码,在某些情况下你可以安全地读取超过2K的数据……这取决于网络,但至少代码是可靠的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读