次のJavaコードを使用して、bytes[]をGZIPとの間で圧縮/解凍します。最初のテキストバイトからgzipバイト:
public static byte[] fromByteToGByte(byte[] bytes) {
ByteArrayOutputStream baos = null;
try {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
baos = new ByteArrayOutputStream();
GZIPOutputStream gzos = new GZIPOutputStream(baos);
byte[] buffer = new byte[1024];
int len;
while((len = bais.read(buffer)) >= 0) {
gzos.write(buffer, 0, len);
}
gzos.close();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
return(baos.toByteArray());
}
次に、圧縮バイトから非圧縮バイトに逆方向に進むメソッド:
public static byte[] fromGByteToByte(byte[] gbytes) {
ByteArrayOutputStream baos = null;
ByteArrayInputStream bais = new ByteArrayInputStream(gbytes);
try {
baos = new ByteArrayOutputStream();
GZIPInputStream gzis = new GZIPInputStream(bais);
byte[] bytes = new byte[1024];
int len;
while((len = gzis.read(bytes)) > 0) {
baos.write(bytes, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
}
return(baos.toByteArray());
}
gzipファイルに書き出していないので効果があると思いますか?
また、標準のC#関数では、BitConverterが最初の4バイトを読み取り、MemoryStream Write関数が開始点4、入力バッファー長-4で呼び出されることに気付きました。これはヘッダーの有効性に影響しますか?
ジム