从BufferedInputStream读取byte []

时间:2019-04-26 15:56:30

标签: java bufferedinputstream

对于下面的代码很奇怪,该代码从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;
}

2 个答案:

答案 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;