use of java.util.zip.DeflaterOutputStream in project robovm by robovm.
the class DeflaterOutputStreamTest method testSyncFlushDeflater.
/**
* Confirm that a DeflaterOutputStream constructed with Deflater
* with flushParm == SYNC_FLUSH does not need to to be flushed.
*
* http://b/4005091
*/
public void testSyncFlushDeflater() throws Exception {
Deflater def = new Deflater();
Field f = def.getClass().getDeclaredField("flushParm");
f.setAccessible(true);
f.setInt(def, Deflater.SYNC_FLUSH);
final int deflaterBufferSize = 512;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DeflaterOutputStream dos = new DeflaterOutputStream(baos, def, deflaterBufferSize);
// make output buffer large enough that even if compressed it
// won't all fit within the deflaterBufferSize.
final int outputBufferSize = 128 * deflaterBufferSize;
byte[] output = new byte[outputBufferSize];
for (int i = 0; i < output.length; i++) {
output[i] = (byte) i;
}
dos.write(output);
byte[] compressed = baos.toByteArray();
// this main reason for this assert is to make sure that the
// compressed byte count is larger than the
// deflaterBufferSize. However, when the original bug exists,
// it will also fail because the compressed length will be
// exactly the length of the deflaterBufferSize.
assertTrue("compressed=" + compressed.length + " but deflaterBufferSize=" + deflaterBufferSize, compressed.length > deflaterBufferSize);
// assert that we returned data matches the input exactly.
ByteArrayInputStream bais = new ByteArrayInputStream(compressed);
InflaterInputStream iis = new InflaterInputStream(bais);
byte[] input = new byte[output.length];
int total = 0;
while (true) {
int n = iis.read(input, total, input.length - total);
if (n == -1) {
break;
}
total += n;
if (total == input.length) {
try {
iis.read();
fail();
} catch (EOFException expected) {
break;
}
}
}
assertEquals(output.length, total);
assertTrue(Arrays.equals(input, output));
// ensure Deflater.finish has not been called at any point
// during the test, since that would lead to the results being
// flushed even without SYNC_FLUSH being used
assertFalse(def.finished());
// Quieten CloseGuard.
def.end();
iis.close();
}
use of java.util.zip.DeflaterOutputStream in project robovm by robovm.
the class DeflaterOutputStreamTest method createInflaterStream.
/**
* Creates an optionally-flushing deflater stream, writes some bytes to it,
* and flushes it. Returns an inflater stream that reads this deflater's
* output.
*
* <p>These bytes are written on a separate thread so that when the inflater
* stream is read, that read will fail when no bytes are available. Failing
* takes 3 seconds, co-ordinated by PipedInputStream's 'broken pipe'
* timeout. The 3 second delay is unfortunate but seems to be the easiest
* way demonstrate that data is unavailable. Ie. other techniques will cause
* the dry read to block indefinitely.
*/
static InputStream createInflaterStream(final Class<?> c, final boolean flushing) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
final PipedOutputStream pout = new PipedOutputStream();
PipedInputStream pin = new PipedInputStream(pout);
executor.submit(new Callable<Void>() {
public Void call() throws Exception {
OutputStream out;
if (c == DeflaterOutputStream.class) {
out = new DeflaterOutputStream(pout, flushing);
} else if (c == GZIPOutputStream.class) {
out = new GZIPOutputStream(pout, flushing);
} else {
throw new AssertionError();
}
out.write(1);
out.write(2);
out.write(3);
out.flush();
return null;
}
}).get();
executor.shutdown();
if (c == DeflaterOutputStream.class) {
return new InflaterInputStream(pin);
} else if (c == GZIPOutputStream.class) {
return new GZIPInputStream(pin);
} else {
throw new AssertionError();
}
}
use of java.util.zip.DeflaterOutputStream in project ddf by codice.
the class RestSecurity method deflateAndBase64Encode.
/**
* Deflates a value and Base64 encodes the result.
*
* @param value value to deflate and Base64 encode
* @return String
* @throws IOException if the value cannot be converted
*/
public static String deflateAndBase64Encode(String value) throws IOException {
ByteArrayOutputStream valueBytes = new ByteArrayOutputStream();
try (OutputStream tokenStream = new DeflaterOutputStream(valueBytes, new Deflater(Deflater.DEFLATED, GZIP_COMPATIBLE))) {
tokenStream.write(value.getBytes(StandardCharsets.UTF_8));
tokenStream.close();
return Base64.getEncoder().encodeToString(valueBytes.toByteArray());
}
}
use of java.util.zip.DeflaterOutputStream in project android_frameworks_base by crdroidandroid.
the class BlobBackupHelper method deflate.
// Also versions the deflated blob internally in case we need to revise it
private byte[] deflate(byte[] data) {
byte[] result = null;
if (data != null) {
try {
ByteArrayOutputStream sink = new ByteArrayOutputStream();
DataOutputStream headerOut = new DataOutputStream(sink);
// write the header directly to the sink ahead of the deflated payload
headerOut.writeInt(mCurrentBlobVersion);
DeflaterOutputStream out = new DeflaterOutputStream(sink);
out.write(data);
// finishes and commits the compression run
out.close();
result = sink.toByteArray();
if (DEBUG) {
Log.v(TAG, "Deflated " + data.length + " bytes to " + result.length);
}
} catch (IOException e) {
Log.w(TAG, "Unable to process payload: " + e.getMessage());
}
}
return result;
}
use of java.util.zip.DeflaterOutputStream in project bnd by bndtools.
the class Httpbin method _deflate.
public void _deflate(Request req, Response rsp) throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
DeflaterOutputStream gzout = new DeflaterOutputStream(bout);
getResource(rsp, "utf8.html", "text/html;charset=utf8");
gzout.write(rsp.content);
gzout.close();
rsp.content = bout.toByteArray();
rsp.length = rsp.content.length;
rsp.headers.put("Content-Encoding", "deflate");
}
Aggregations