mirror of
https://github.com/apache/httpcomponents-client.git
synced 2025-02-16 06:56:24 +00:00
DeflateInputStream extends FilterInputStream
- Reduces boilerplate - Improve Javadoc - Internal static class can be private - Reuse constant Deflater.DEFLATED
This commit is contained in:
parent
bc9d925c84
commit
01c478b7d8
@ -26,23 +26,23 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.hc.client5.http.entity;
|
package org.apache.hc.client5.http.entity;
|
||||||
|
|
||||||
|
import java.io.FilterInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.PushbackInputStream;
|
import java.io.PushbackInputStream;
|
||||||
|
import java.util.zip.Deflater;
|
||||||
import java.util.zip.Inflater;
|
import java.util.zip.Inflater;
|
||||||
import java.util.zip.InflaterInputStream;
|
import java.util.zip.InflaterInputStream;
|
||||||
import java.util.zip.ZipException;
|
import java.util.zip.ZipException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deflate input stream. This class includes logic needed for various Rfc's in order
|
* Deflates an input stream. This class includes logic needed for various RFCs in order
|
||||||
* to reasonably implement the "deflate" compression style.
|
* to reasonably implement the "deflate" compression algorithm.
|
||||||
*/
|
*/
|
||||||
public class DeflateInputStream extends InputStream {
|
public class DeflateInputStream extends FilterInputStream {
|
||||||
|
|
||||||
private final InputStream sourceStream;
|
|
||||||
|
|
||||||
public DeflateInputStream(final InputStream wrapped) throws IOException {
|
public DeflateInputStream(final InputStream wrapped) throws IOException {
|
||||||
|
super(null);
|
||||||
final PushbackInputStream pushback = new PushbackInputStream(wrapped, 2);
|
final PushbackInputStream pushback = new PushbackInputStream(wrapped, 2);
|
||||||
final int i1 = pushback.read();
|
final int i1 = pushback.read();
|
||||||
final int i2 = pushback.read();
|
final int i2 = pushback.read();
|
||||||
@ -58,89 +58,17 @@ public DeflateInputStream(final InputStream wrapped) throws IOException {
|
|||||||
final int compressionMethod = b1 & 0xF;
|
final int compressionMethod = b1 & 0xF;
|
||||||
final int compressionInfo = b1 >> 4 & 0xF;
|
final int compressionInfo = b1 >> 4 & 0xF;
|
||||||
final int b2 = i2 & 0xFF;
|
final int b2 = i2 & 0xFF;
|
||||||
if (compressionMethod == 8 && compressionInfo <= 7 && ((b1 << 8) | b2) % 31 == 0) {
|
if (compressionMethod == Deflater.DEFLATED && compressionInfo <= 7 && ((b1 << 8) | b2) % 31 == 0) {
|
||||||
nowrap = false;
|
nowrap = false;
|
||||||
}
|
}
|
||||||
sourceStream = new DeflateStream(pushback, new Inflater(nowrap));
|
in = new DeflateStream(pushback, new Inflater(nowrap));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private static class DeflateStream extends InflaterInputStream {
|
||||||
* Read a byte.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int read() throws IOException {
|
|
||||||
return sourceStream.read();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read lots of bytes.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int read(final byte[] b) throws IOException {
|
|
||||||
return sourceStream.read(b);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read lots of specific bytes.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int read(final byte[] b, final int off, final int len) throws IOException {
|
|
||||||
return sourceStream.read(b, off, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Skip
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public long skip(final long n) throws IOException {
|
|
||||||
return sourceStream.skip(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get available.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public int available() throws IOException {
|
|
||||||
return sourceStream.available();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Mark.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void mark(final int readLimit) {
|
|
||||||
sourceStream.mark(readLimit);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void reset() throws IOException {
|
|
||||||
sourceStream.reset();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if mark is supported.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public boolean markSupported() {
|
|
||||||
return sourceStream.markSupported();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Close.
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public void close() throws IOException {
|
|
||||||
sourceStream.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
static class DeflateStream extends InflaterInputStream {
|
|
||||||
|
|
||||||
private boolean closed;
|
private boolean closed;
|
||||||
|
|
||||||
public DeflateStream(final InputStream in, final Inflater inflater) {
|
private DeflateStream(final InputStream in, final Inflater inflater) {
|
||||||
super(in, inflater);
|
super(in, inflater);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,4 +85,3 @@ public void close() throws IOException {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user