Чтение байта [] из BufferedInputStream - PullRequest
0 голосов
/ 26 апреля 2019

Интересно узнать код, который читает данные из сокета TCP BufferedInputStream.Есть ли какая-либо причина прочитать первый байт с int s = _in.read(), а затем остальные 100 * *.Могу ли я прочитать только байт [] без использования первой строки чтения?

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 ]

1 голос
/ 26 апреля 2019

Вы не должны полагаться на вызов available(), чтобы узнать длину потока, поскольку он возвращает только оценку. Если вы хотите прочитать все байты, сделайте это в цикле следующим образом:

String data = "";
byte[] buffer = new byte[1024];
int read;
while((read = _in.read(buffer)) != -1) {
   data += new String(buffer, 0, read);    
} 
0 голосов
/ 26 апреля 2019

Вы можете использовать метод пропуска BufferedInputStream, чтобы пропустить любое количество байтов, как вы хотите. Как вы можете добавить в свой код следующим образом

 _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;
...