В моем приложении я пытаюсь сжать / распаковать байтовый массив, используя класс Inflater / Deflater java.Вот часть кода, который я использовал сначала:
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length);
byte[] buffer = new byte[1024];
while (!inflater.finished()) {
int count = inflater.inflate(buffer);
outputStream.write(buffer, 0, count);
}
Затем, после того, как я развернул код, он случайным образом (очень редко) вызовет зависание всего приложения, и когда я получу дамп потока, я могу определитьчто одна нить висит
at java.util.zip.Inflater.inflateBytes(Native Method)
at java.util.zip.Inflater.inflate(Inflater.java:259)
- locked java.util.zip.ZStreamRef@fc71443
at java.util.zip.Inflater.inflate(Inflater.java:280)
Это случается не очень часто.Затем я везде погуглил и обнаружил, что это могут быть некоторые пустые байтовые данные, переданные в inflater, и Finished () никогда не вернет true.
Поэтому я использовал обходной путь вместо
while (!inflater.finished())
чтобы определить, закончено ли это, я использовал
while (inflater.getRemaining() > 0)
Но это случилось снова.Теперь это заставляет меня задуматься, какова реальная причина, которая вызывает проблему.Не должно быть никакого пустого массива, передаваемого в inflater, даже если он это сделал, почему метод getRemaining () не прерывал цикл while?Кто-нибудь может помочь пожалуйста?Это действительно беспокоит меня.