Re:データの圧縮と展開
お題: Server error
投稿: Server error
圧縮、展開ってことなので
圧縮、展開ってことなので、java.util.zip.*パッケージを使って実装するのが一番いいのかなということで。
動作確認はGroovy Version: 1.5.7 JVM: 1.6.0_10にて。
/** 圧縮 */ byte[] compress(byte[] input) { def output = new ByteArrayOutputStream() def zos = new ZipOutputStream(output) zos.putNextEntry(new ZipEntry('')) zos << input zos.closeEntry() zos.close() output.toByteArray() } /** 展開 */ byte[] decompress(byte[] input) { def zis = new ZipInputStream(new ByteArrayInputStream(input)) zis.getNextEntry() def output = new ByteArrayOutputStream() output << zis zis.close() output.toByteArray() }
考察
byteで受け取って、圧縮、展開してbyteで返却します。
- OutputStream#leftShift()
- InputStream#leftShift()
がGDKで拡張されているので、
zos << input output << zis
という、簡潔な記述ができていると思います。
ストリーム系を使わないでByteBufferとかを使ったらもうちょっとよい感じのコードができるだろうか。