更快的read()或读取(字节,偏移,长度)的InputStream

Vin*_*rya 3 java sockets android

我正在为Android编写一个使用InputStreamfrom 的应用程序Socket.我试图通过这种方式从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;
    }
}
Run Code Online (Sandbox Code Playgroud)

2)

while(inputStream.read(byte,0,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 7

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

然而,你的代码目前坏了,你不考虑返回值read以外的其他检查的东西已被读取.它可能没有读取2048字节.你应该使用类似的东西:

int bytesRead;

while ((bytesRead = inputStream.read(buffer, 0, buffer.length)) > 0)
{
    // Use bytesRead here
}
Run Code Online (Sandbox Code Playgroud)

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