Во второй раз у меня возникает эта чрезвычайно раздражающая проблема с InputStream.Этот InputStream принадлежит Сокету, который должен получить изображение.Код для чтения этого изображения следующий:
InputStream input = socket.getInputStream();
InputStreamReader reader = new InputStreamReader(input);
BufferedReader bufferedReader = new BufferedReader(reader);
int total = Integer.parseInt(bufferedReader.readLine());
int bytesRead = 0;
byte[] buffer = new byte[total]; // total is the total size of the image
while (bytesRead < total) {
int next = input.read(buffer, bytesRead, total-bytesRead);
if (next > 0) {
bytesRead += next;
System.out.println("Read: " + bytesRead);
}
}
Теперь странно то, что этот код пропускает первые 1182 байта изображения, а затем читает оставшуюся часть.Поэтому, когда размер total
равен 15000 байт, он читает 1182-15000 байт.
Я проверил Wireshark, и все изображение передается.Код не выдает никаких исключений.input.read()
возвращает -1 как обычно.
Предыдущие данные были извлечены из потока с использованием BufferedReader
.Эти данные имеют длину всего 5 символов, поэтому они не могут содержать пропущенный 1 КБ, но я предполагаю, что метод BufferedReader.readLine () считывает (буферизует) больше байтов из InputStream, чем необходимо.Может ли это быть правильным?
У меня была такая же проблема несколько месяцев назад, но я абсолютно не представляю, как я ее решил.
Надеюсь, кто-нибудь может помочь.
Заранее спасибо.
РЕДАКТИРОВАТЬ: Я могу решить проблему, добавив 100 мс сна между отправкой размера изображения и данных изображения.Это решает проблему, но я все еще хотел бы узнать более подходящее решение