Zlib decoder calls reduction and index fix
Motivation: The JdkZlibDecoder and JZlibDecoder call isReadable and readableBytes in the same method. There is an opportunity to reduce the number of methods calls to just use readableBytes. JdkZlibDecoder reads from a ByteBuf with an absolute index instead of using readerIndex() Modifications: - Use readableBytes where isReadable was used - Correct absolute ByteBuf index to be relative to readerIndex() Result: Less method calls duplicating work and preventing an index out of bounds exception.
This commit is contained in:
parent
0d58d07bbf
commit
ded37d8893
@ -90,13 +90,13 @@ public class JZlibDecoder extends ZlibDecoder {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!in.isReadable()) {
|
final int inputLength = in.readableBytes();
|
||||||
|
if (inputLength == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Configure input.
|
// Configure input.
|
||||||
int inputLength = in.readableBytes();
|
|
||||||
z.avail_in = inputLength;
|
z.avail_in = inputLength;
|
||||||
if (in.hasArray()) {
|
if (in.hasArray()) {
|
||||||
z.next_in = in.array();
|
z.next_in = in.array();
|
||||||
|
@ -125,17 +125,18 @@ public class JdkZlibDecoder extends ZlibDecoder {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!in.isReadable()) {
|
int readableBytes = in.readableBytes();
|
||||||
|
if (readableBytes == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (decideZlibOrNone) {
|
if (decideZlibOrNone) {
|
||||||
// First two bytes are needed to decide if it's a ZLIB stream.
|
// First two bytes are needed to decide if it's a ZLIB stream.
|
||||||
if (in.readableBytes() < 2) {
|
if (readableBytes < 2) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean nowrap = !looksLikeZlib(in.getShort(0));
|
boolean nowrap = !looksLikeZlib(in.getShort(in.readerIndex()));
|
||||||
inflater = new Inflater(nowrap);
|
inflater = new Inflater(nowrap);
|
||||||
decideZlibOrNone = false;
|
decideZlibOrNone = false;
|
||||||
}
|
}
|
||||||
@ -154,13 +155,14 @@ public class JdkZlibDecoder extends ZlibDecoder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Some bytes may have been consumed, and so we must re-set the number of readable bytes.
|
||||||
|
readableBytes = in.readableBytes();
|
||||||
}
|
}
|
||||||
|
|
||||||
int readableBytes = in.readableBytes();
|
|
||||||
if (in.hasArray()) {
|
if (in.hasArray()) {
|
||||||
inflater.setInput(in.array(), in.arrayOffset() + in.readerIndex(), in.readableBytes());
|
inflater.setInput(in.array(), in.arrayOffset() + in.readerIndex(), readableBytes);
|
||||||
} else {
|
} else {
|
||||||
byte[] array = new byte[in.readableBytes()];
|
byte[] array = new byte[readableBytes];
|
||||||
in.getBytes(in.readerIndex(), array);
|
in.getBytes(in.readerIndex(), array);
|
||||||
inflater.setInput(array);
|
inflater.setInput(array);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user