Class DeltaEncoder
- java.lang.Object
-
- org.eclipse.jgit.internal.storage.pack.DeltaEncoder
-
public class DeltaEncoder extends java.lang.Object
Encodes an instruction stream forBinaryDelta
.
-
-
Field Summary
Fields Modifier and Type Field Description private byte[]
buf
private int
limit
private static int
MAX_COPY_CMD_SIZE
Maximum number of bytes used by a copy instruction.private static int
MAX_INSERT_DATA_SIZE
Maximum length that an insert command can encode at once.private static int
MAX_V2_COPY
Maximum number of bytes to be copied in pack v2 format.private java.io.OutputStream
out
private int
size
-
Constructor Summary
Constructors Constructor Description DeltaEncoder(java.io.OutputStream out, long baseSize, long resultSize)
Create an encoder with no upper bound on the instruction stream size.DeltaEncoder(java.io.OutputStream out, long baseSize, long resultSize, int limit)
Create an encoder with an upper limit on the instruction size.
-
Method Summary
All Methods Instance Methods Concrete Methods 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
getSize()
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(java.lang.String text)
Insert a literal string of text, in UTF-8 encoding.private void
writeVarint(long sz)
-
-
-
Field Detail
-
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:
- Constant Field Values
-
MAX_COPY_CMD_SIZE
private static final int MAX_COPY_CMD_SIZE
Maximum number of bytes used by a copy instruction.- See Also:
- Constant Field Values
-
MAX_INSERT_DATA_SIZE
private static final int MAX_INSERT_DATA_SIZE
Maximum length that an insert command can encode at once.- See Also:
- Constant Field Values
-
out
private final java.io.OutputStream out
-
buf
private final byte[] buf
-
limit
private final int limit
-
size
private int size
-
-
Constructor Detail
-
DeltaEncoder
public DeltaEncoder(java.io.OutputStream out, long baseSize, long resultSize) throws java.io.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:
java.io.IOException
- the output buffer cannot store the instruction stream's header with the size fields.
-
DeltaEncoder
public DeltaEncoder(java.io.OutputStream out, long baseSize, long resultSize, int limit) throws java.io.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:
java.io.IOException
- the output buffer cannot store the instruction stream's header with the size fields.
-
-
Method Detail
-
writeVarint
private void writeVarint(long sz) throws java.io.IOException
- Throws:
java.io.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(java.lang.String text) throws java.io.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:
java.io.IOException
- the instruction buffer can't store the instructions.
-
insert
public boolean insert(byte[] text) throws java.io.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:
java.io.IOException
- the instruction buffer can't store the instructions.
-
insert
public boolean insert(byte[] text, int off, int cnt) throws java.io.IOException
Insert a literal binary sequence.- Parameters:
text
- the binary to insert.off
- offset withintext
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:
java.io.IOException
- the instruction buffer can't store the instructions.
-
copy
public boolean copy(long offset, int cnt) throws java.io.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:
java.io.IOException
- the instruction buffer cannot store the instructions.
-
encodeCopy
private int encodeCopy(int p, long offset, int cnt)
-
-