我正在为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;
}
}
形成这两种在性能方面更快的方法?
答案 0 :(得分:7)
第二,可能很长一段路。一次读取一个块几乎总是比一次读取一个字节更好,除非真的只想读取一个字节。
但是,您的代码目前已被破坏,因为您没有考虑read
的返回值,而是检查某些内容已被读取。它可能没有读取2048字节。你应该使用类似的东西:
int bytesRead;
while ((bytesRead = inputStream.read(buffer, 0, buffer.length)) > 0)
{
// Use bytesRead here
}
使用此代码,您可以在某些情况下安全地一次读取超过2K ...这取决于网络,但至少代码将是可靠的
答案 1 :(得分:0)
@Op,您还可以创建具有指定缓冲区大小的BufferedInputStream,并从缓冲流中读取块。