Понимание обещаний в node.js

Есть лучший вариант. Создайте манекен LengthOutputStream, который просто учитывает записанные байты:

public class LengthOutputStream extends OutputStream {

    private long length = 0L;

    @Override
    public void write(int b) throws IOException {
        length++;
    }

    public long getLength() {
        return length;
    }
}

Вы можете просто подключить LengthOutputStream к ZipOutputStream:

public static long sizeOfZippedDirectory(File dir) throws FileNotFoundException, IOException {
        try (LengthOutputStream sos = new LengthOutputStream();
            ZipOutputStream zos = new ZipOutputStream(sos);) {
            ... // Add ZIP entries to the stream
            return sos.getLength();
        }
    }

Кнопка LengthOutputStream подсчитывает байты заархивированного потока, но ничего не сохраняет, поэтому ограничение размера файла отсутствует. Этот метод дает точную оценку размера, но почти так же медленно, как создание ZIP-файла.

145
задан Kornel 27 September 2015 в 23:49
поделиться