JavaのZipOutputStreamとRubyのZlib::Deflateの使い方
categories: Ruby Rails tags: Java Programming Ruby
いまやってる仕事で、JavaのZipOutputStreamを使ってテキストデータを圧縮するというコードを書いているのですが、こいつがなかなか手強いです。
Web上のサンプルコードはほとんどが圧縮ファイルを吐き出すものなのですが、今回の場合はファイルではなく圧縮データだけが欲しいのです。
Webのサンプルを寄せ集めて以下のようなコードを書いたのですが、textは直接圧縮できる程度のデータ量なのでStreamを経由させなくていいはずだし、ZipEntryで "zipped_entry" というファイル名(?)を与えてるのも気持ち悪いです。もっとスマートに書けなる気がしてしょうがない。。
ByteArrayOutputStream byte_out = new ByteArrayOutputStream();
ZipOutputStream zip_out = new ZipOutputStream(byte_out);
zip_out.putNextEntry(new ZipEntry("zipped_entry"));
zip_out.write(text.getBytes(), 0, text.getBytes().length);
zip_out.closeEntry();
zip_out.close();
String zipped_text = byte_out.toString();
Rubyだと1行で書けます。(Stream的なのを使おうとすれば別)
zipped_text = Zlib::Deflate.deflate(text)
以下のようにStringクラスにメソッドを追加すれば
class String
def zipped
require 'zlib'
Zlib::Deflate.deflate(self)
end
end
こんなに気持よく書けるようになります。
text.zipped
この差は言語の差なのか、僕がJava分かってなさすぎなだけなのか、どっちなんでしょう?
教えて、Javaの人!