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

时间:2011-05-07 07:56:21

标签: java android sockets

我正在为Android编写一个使用InputStream 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;
    }
}

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;
    }
}

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

2 个答案:

答案 0 :(得分:7)

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

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

int bytesRead;

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

使用此代码,您可以在某些情况下安全地一次读取超过2K ...这取决于网络,但至少代码将是可靠的

答案 1 :(得分:0)

@Op,您还可以创建具有指定缓冲区大小的BufferedInputStream,并从缓冲流中读取块。