/**
* Copyright (c) 2012-2016 André Bargull
* Alle Rechte vorbehalten / All Rights Reserved. Use is subject to license terms.
*
* <https://github.com/anba/es6draft>
*/
package com.github.anba.es6draft.runtime.internal;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
*
*/
public final class SourceCompressor {
private static final int BUFFER_SIZE = 256;
private SourceCompressor() {
}
private static final class ByteOutputStream extends ByteArrayOutputStream {
ByteOutputStream(int size) {
super(size);
}
public String toString(Charset cs) {
return new String(buf, 0, count, cs);
}
}
/**
* Returns the compressed source string.
*
* @param source
* the source string
* @return the compressed source
* @throws IOException
* if there was any I/O error
*/
public static String compress(String source) throws IOException {
ByteOutputStream bout = new ByteOutputStream(BUFFER_SIZE);
GZIPOutputStream out = new GZIPOutputStream(bout, BUFFER_SIZE);
out.write(source.getBytes(StandardCharsets.UTF_8));
out.close();
return bout.toString(StandardCharsets.ISO_8859_1);
}
/**
* Returns the decompressed source string.
*
* @param source
* the compressed source string
* @return the decompressed source
* @throws IOException
* if there was any I/O error
*/
public static String decompress(String source) throws IOException {
byte[] compressed = source.getBytes(StandardCharsets.ISO_8859_1);
ByteArrayInputStream bin = new ByteArrayInputStream(compressed);
GZIPInputStream in = new GZIPInputStream(bin, BUFFER_SIZE);
ByteOutputStream bout = new ByteOutputStream(BUFFER_SIZE);
byte[] buf = new byte[BUFFER_SIZE];
for (int n; (n = in.read(buf)) != -1;) {
bout.write(buf, 0, n);
}
bout.close();
return bout.toString(StandardCharsets.UTF_8);
}
}