有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java InputStream哪个读取速度更快()或读取速度更快(字节、偏移量、长度)

我正在为安卓编写一个应用程序,它使用来自SocketInputStream。我正试图通过这种方式将文件从pc发送到安卓。该文件的大小几乎为40kb,在安卓上,我发现它一次只能读取2kb的数据,所以我将其分块读取

我有两种读取字节的方法

(一)

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

(二)

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) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

    然而,您的代码目前已被破坏,因为除了检查某个已被读取之外,您没有考虑read的返回值。它可能没有读取2048字节。你应该使用类似于:

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

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