Как использовать ChannelBufferOutputStream для проверки размера сжатия
В Java-программе я сжимаю InputStream следующим образом:
ChannelBufferOutputStream outputStream = new ChannelBufferOutputStream(ChannelBuffers.dynamicBuffer(BUFFER_SIZE));
GZIPOutputStream compressedOutputStream = new GZIPOutputStream(outputStream);
try {
IOUtils.copy(inputStream, compressedOutputStream);
} finally {
// this should print the byte size after compression
System.out.println(outputStream.writtenBytes());
}
Я тестирую этот код с файлом json, который распакован на диск ~31.000 байт и сжат на диск ~7.000 байт. Отправляя InputStream, который оборачивает несжатый файл json в приведенный выше код, outputStream.writtenBytes() возвращает 10, что указывает на то, что он сжат до 10 байтов. Это кажется неправильным, поэтому мне интересно, где проблема. ChannelBufferOutputStream javadoc говорит: Возвращает количество записанных байтов этим потоком до сих пор. Так что должно работать.
1 ответ
Решение
- Попробуйте позвонить
GZIPOutputStream.finish()
или жеflush()
методы перед подсчетом байтов - Если это не сработает, вы можете создать прокси-поток, задача которого - подсчитать количество байтов, прошедших через него