Example usage for org.apache.commons.compress.utils BoundedInputStream BoundedInputStream

List of usage examples for org.apache.commons.compress.utils BoundedInputStream BoundedInputStream

Introduction

In this page you can find the example usage for org.apache.commons.compress.utils BoundedInputStream BoundedInputStream.

Prototype

public BoundedInputStream(final InputStream in, final long size) 

Source Link

Document

Creates the stream that will at most read the given amount of bytes from the given stream.

Usage

From source file:srebrinb.compress.sevenzip.SevenZFile.java

private void buildDecodingStream() throws IOException {
    final int folderIndex = archive.streamMap.fileFolderIndex[currentEntryIndex];
    if (folderIndex < 0) {
        deferredBlockStreams.clear();/*ww w .j a  v  a2s.  c o m*/
        // TODO: previously it'd return an empty stream?
        // new BoundedInputStream(new ByteArrayInputStream(new byte[0]), 0);
        return;
    }
    final SevenZArchiveEntry file = archive.files[currentEntryIndex];
    if (currentFolderIndex == folderIndex) {
        // (COMPRESS-320).
        // The current entry is within the same (potentially opened) folder. The
        // previous stream has to be fully decoded before we can start reading
        // but don't do it eagerly -- if the user skips over the entire folder nothing
        // is effectively decompressed.

        file.setContentMethods(archive.files[currentEntryIndex - 1].getContentMethods());
    } else {
        // We're opening a new folder. Discard any queued streams/ folder stream.
        currentFolderIndex = folderIndex;
        deferredBlockStreams.clear();
        if (currentFolderInputStream != null) {
            currentFolderInputStream.close();
            currentFolderInputStream = null;
        }

        final Folder folder = archive.folders[folderIndex];
        final int firstPackStreamIndex = archive.streamMap.folderFirstPackStreamIndex[folderIndex];
        final long folderOffset = SIGNATURE_HEADER_SIZE + archive.packPos
                + archive.streamMap.packStreamOffsets[firstPackStreamIndex];
        currentFolderInputStream = buildDecoderStack(folder, folderOffset, firstPackStreamIndex, file);
    }

    InputStream fileStream = new BoundedInputStream(currentFolderInputStream, file.getSize());
    if (file.getHasCrc()) {
        fileStream = new CRC32VerifyingInputStream(fileStream, file.getSize(), file.getCrcValue());
    }

    deferredBlockStreams.add(fileStream);
}