Class BinaryDeltaInputStream

java.lang.Object
java.io.InputStream
org.eclipse.jgit.util.io.BinaryDeltaInputStream
All Implemented Interfaces:
Closeable, AutoCloseable

public class BinaryDeltaInputStream extends InputStream
An InputStream that applies a binary delta to a base on the fly.

Delta application to a base needs random access to the base data. The delta is expressed as a sequence of copy and insert instructions. A copy instruction has the form "COPY fromOffset length" and says "copy length bytes from the base, starting at offset fromOffset, to the result". An insert instruction has the form "INSERT length" followed by length bytes and says "copy the next length bytes from the delta to the result".

These instructions are generated using a content-defined chunking algorithm (currently C git uses the standard Rabin variant; but there are others that could be used) that identifies equal chunks. It is entirely possible that a later copy instruction has a fromOffset that is before the fromOffset of an earlier copy instruction.

This makes it impossible to stream the base.

JGit is limited to 2GB maximum size for the base since array indices are signed 32bit values.

Since:
5.12
  • Field Details

    • base

      private final byte[] base
    • delta

      private final InputStream delta
    • resultLength

      private long resultLength
    • toDeliver

      private long toDeliver
    • fromBase

      private int fromBase
    • fromDelta

      private int fromDelta
    • baseOffset

      private int baseOffset
  • Constructor Details

    • BinaryDeltaInputStream

      public BinaryDeltaInputStream(byte[] base, InputStream delta)
      Creates a new BinaryDeltaInputStream that applies delta to base.
      Parameters:
      base - data to apply the delta to
      delta - InputStream delivering the delta to apply
  • Method Details