Java 读取速度更快的InputStream()或读取速度更快的InputStream(字节、偏移量、长度)

Java 读取速度更快的InputStream()或读取速度更快的InputStream(字节、偏移量、长度),java,android,sockets,Java,Android,Sockets,我正在为android编写一个应用程序,它使用来自Socket的InputStream。我正试图通过这种方式将文件从pc发送到android。该文件的大小几乎为40kb,在android上,我发现它一次只能读取2kb的数据,所以我将其分块读取 我有两种读取字节的方法 (一) (二) 形成这两种性能更快的方法?第二种,可能会有很长的路要走。一次读取一个块几乎总是比一次读取一个字节更好,除非您真的只想读取一个字节 但是,您的代码当前已被破坏,因为您不考虑read的返回值,而是检查是否已读取某些内容。

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

我有两种读取字节的方法

(一)

(二)


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

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

但是,您的代码当前已被破坏,因为您不考虑
read
的返回值,而是检查是否已读取某些内容。它可能没有读取2048字节。您应该使用以下内容:

int bytesRead;

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

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

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

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

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