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