読者です 読者をやめる 読者になる 読者になる

No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

Re:データの圧縮と展開

どう書く Groovy

お題: 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とかを使ったらもうちょっとよい感じのコードができるだろうか。