【发布时间】:2019-04-26 15:56:30
【问题描述】:
想知道下面从 TCP Socket BufferedInputStream 读取数据的代码。有什么理由用int s = _in.read() 读取第一个字节,然后用_in.read(byteData); 读取其余字节。我可以在不使用第一个读取行的情况下只读取 byte[] 吗?
private static String readInputStream(BufferedInputStream _in) throws IOException
{
String data = "";
int s = _in.read();
if(s==-1)
return null;
data += ""+(char)s;
int len = _in.available();
System.out.println("Len got : "+len);
if(len > 0) {
byte[] byteData = new byte[len];
_in.read(byteData);
data += new String(byteData);
}
return data;
}
【问题讨论】:
-
它可能试图通过首先读取一个字节来填充缓冲缓存(否则对
available()的调用将返回 0)。这可能是对available()方法的滥用,因为通常不建议使用available()返回的值来确定要读入的缓冲区的大小。