package org.jerlang.stdlib.beam_lib; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import com.jcraft.jzlib.InflaterInputStream; public class LiteralTableChunkReader extends AbstractChunkReader<LiteralTableChunk> { public LiteralTableChunkReader(Chunk chunk, DataInputStream inputStream) { super(chunk, inputStream); } public LiteralTableChunk read() throws Throwable { LiteralTableChunk literalTableChunk = new LiteralTableChunk(chunk()); int uncompressedSize = read4Bytes(); byte[] uncompressed = new byte[uncompressedSize]; int offset = 0; int left = uncompressedSize; try (InflaterInputStream iis = new InflaterInputStream(inputStream())) { do { int decompressed = iis.read(uncompressed, offset, left); offset += decompressed; left -= decompressed; } while (left > 0); } setInputStream(new DataInputStream(new ByteArrayInputStream(uncompressed))); int literals = read4Bytes(); while (literals-- > 0) { read4Bytes(); // length of literal literalTableChunk.add(readTerm()); } return literalTableChunk; } }