对于下面的代码很奇怪,该代码从TCP套接字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;
}
答案 0 :(得分:1)
您不应依赖调用available()
来找到Stream的长度,因为Stream仅返回估计值。如果要读取所有字节,请按如下所示循环进行操作:
String data = "";
byte[] buffer = new byte[1024];
int read;
while((read = _in.read(buffer)) != -1) {
data += new String(buffer, 0, read);
}
答案 1 :(得分:0)
您可以使用BufferedInputStream的skip方法来根据需要跳过任何数量的字节。 就像您可以按如下所示将其添加到代码中一样
_in.skip(1);
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;