Class DeltaEncoder

java.lang.Object
org.eclipse.jgit.internal.storage.pack.DeltaEncoder

public class DeltaEncoder extends Object
Encodes an instruction stream for BinaryDelta.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private final byte[]
     
    private final int
     
    private static final int
    Maximum number of bytes used by a copy instruction.
    private static final int
    Maximum length that an insert command can encode at once.
    private static final int
    Maximum number of bytes to be copied in pack v2 format.
    private final OutputStream
     
    private int
     
  • Constructor Summary

    Constructors
    Constructor
    Description
    DeltaEncoder(OutputStream out, long baseSize, long resultSize)
    Create an encoder with no upper bound on the instruction stream size.
    DeltaEncoder(OutputStream out, long baseSize, long resultSize, int limit)
    Create an encoder with an upper limit on the instruction size.
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    copy(long offset, int cnt)
    Create a copy instruction to copy from the base object.
    private int
    encodeCopy(int p, long offset, int cnt)
     
    int
    Get current size of the delta stream, in bytes.
    boolean
    insert(byte[] text)
    Insert a literal binary sequence.
    boolean
    insert(byte[] text, int off, int cnt)
    Insert a literal binary sequence.
    boolean
    insert(String text)
    Insert a literal string of text, in UTF-8 encoding.
    private void
    writeVarint(long sz)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • MAX_V2_COPY

      private static final int MAX_V2_COPY
      Maximum number of bytes to be copied in pack v2 format.

      Historical limitations have this at 64k, even though current delta decoders recognize larger copy instructions.

      See Also:
    • MAX_COPY_CMD_SIZE

      private static final int MAX_COPY_CMD_SIZE
      Maximum number of bytes used by a copy instruction.
      See Also:
    • MAX_INSERT_DATA_SIZE

      private static final int MAX_INSERT_DATA_SIZE
      Maximum length that an insert command can encode at once.
      See Also:
    • out

      private final OutputStream out
    • buf

      private final byte[] buf
    • limit

      private final int limit
    • size

      private int size
  • Constructor Details

    • DeltaEncoder

      public DeltaEncoder(OutputStream out, long baseSize, long resultSize) throws IOException
      Create an encoder with no upper bound on the instruction stream size.
      Parameters:
      out - buffer to store the instructions written.
      baseSize - size of the base object, in bytes.
      resultSize - size of the resulting object, after applying this instruction stream to the base object, in bytes.
      Throws:
      IOException - the output buffer cannot store the instruction stream's header with the size fields.
    • DeltaEncoder

      public DeltaEncoder(OutputStream out, long baseSize, long resultSize, int limit) throws IOException
      Create an encoder with an upper limit on the instruction size.
      Parameters:
      out - buffer to store the instructions written.
      baseSize - size of the base object, in bytes.
      resultSize - size of the resulting object, after applying this instruction stream to the base object, in bytes.
      limit - maximum number of bytes to write to the out buffer declaring the stream is over limit and should be discarded. May be 0 to specify an infinite limit.
      Throws:
      IOException - the output buffer cannot store the instruction stream's header with the size fields.
  • Method Details

    • writeVarint

      private void writeVarint(long sz) throws IOException
      Throws:
      IOException
    • getSize

      public int getSize()
      Get current size of the delta stream, in bytes.
      Returns:
      current size of the delta stream, in bytes.
    • insert

      public boolean insert(String text) throws IOException
      Insert a literal string of text, in UTF-8 encoding.
      Parameters:
      text - the string to insert.
      Returns:
      true if the insert fits within the limit; false if the insert would cause the instruction stream to exceed the limit.
      Throws:
      IOException - the instruction buffer can't store the instructions.
    • insert

      public boolean insert(byte[] text) throws IOException
      Insert a literal binary sequence.
      Parameters:
      text - the binary to insert.
      Returns:
      true if the insert fits within the limit; false if the insert would cause the instruction stream to exceed the limit.
      Throws:
      IOException - the instruction buffer can't store the instructions.
    • insert

      public boolean insert(byte[] text, int off, int cnt) throws IOException
      Insert a literal binary sequence.
      Parameters:
      text - the binary to insert.
      off - offset within text to start copying from.
      cnt - number of bytes to insert.
      Returns:
      true if the insert fits within the limit; false if the insert would cause the instruction stream to exceed the limit.
      Throws:
      IOException - the instruction buffer can't store the instructions.
    • copy

      public boolean copy(long offset, int cnt) throws IOException
      Create a copy instruction to copy from the base object.
      Parameters:
      offset - position in the base object to copy from. This is absolute, from the beginning of the base.
      cnt - number of bytes to copy.
      Returns:
      true if the copy fits within the limit; false if the copy would cause the instruction stream to exceed the limit.
      Throws:
      IOException - the instruction buffer cannot store the instructions.
    • encodeCopy

      private int encodeCopy(int p, long offset, int cnt)