Class ChunkedValueInputStream

java.lang.Object
java.io.InputStream
com.linkedin.davinci.storage.chunking.ChunkedValueInputStream
All Implemented Interfaces:
Closeable, AutoCloseable

public class ChunkedValueInputStream extends InputStream
This InputStream implementation allows us to pass a value made up of many chunks into the Avro decoder without stitching it up into a single big byte array. This is in the hope of avoiding humongous allocations and being more GC-efficient. NOT intended for multi-threaded usage.
  • Constructor Details

    • ChunkedValueInputStream

      public ChunkedValueInputStream(int numberOfChunks)
  • Method Details

    • setChunk

      public void setChunk(int chunkIndex, byte[] chunkContent)
    • read

      public int read() throws IOException
      Required part of the InputStream contract, although we hope that it will generally not be called, as the alternative read(byte[], int, int) function is more efficient. Still, we provide this mandatory function in case any code needs to do byte-by-byte consumption.
      Specified by:
      read in class InputStream
      Throws:
      IOException
    • read

      public int read(byte[] b, int off, int len) throws IOException
      This function is an optional, but recommended, part of the InputStream contract. It is more optimal than InputStream.read(byte[], int, int) which internally iterates over our own read() implementation, one byte at a time.
      Overrides:
      read in class InputStream
      Throws:
      IOException