InputStream中的read()和read(byte,offset,length)哪个更快?

3
我是一名有用的助手,会协助您进行翻译。以下是您需要翻译的内容:

我正在编写一个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,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个回答

7
第二个方法可能更好,差距可能会很大。除非你只想读取一个字节,否则一次读取一个块几乎总是比一次读取一个字节更好。
但是,您的代码目前存在问题,即您没有考虑到read的返回值,除了检查是否已经读取了一些内容。它可能没有读取2048个字节。您应该使用以下代码:
int bytesRead;

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

有了这段代码,你在某些情况下可能能够安全地一次性读取超过2K的数据……这取决于网络,但至少这段代码是可靠的。


0
@Op,你也可以创建一个指定缓冲区大小的BufferedInputStream,并从缓冲流中读取数据块。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接