10

InputStream を圧縮して InputStream を返そうとしています:

public InputStream compress (InputStream in){
  // Read "in" and write to ZipOutputStream
  // Convert ZipOutputStream into InputStream and return
}

私は 1 つのファイルを圧縮しています (GZIP を使用できるようにするため) が、将来はさらに圧縮する予定です (したがって、ZIP を選択しました)。ほとんどの場所で:

私の問題は次のとおりです。

  1. そのようなメソッドが存在しない場合、どうすれば ZipOutPutStream を InputStream に変換できますか?

  2. ZipOutPutStream() を作成するとき、デフォルトのコンストラクターはありません。新しい ZipOutputStrem(new OutputStream() ) を作成する必要がありますか??

4

2 に答える 2

10

そんな感じ:

private InputStream compress(InputStream in, String entryName) throws IOException {
        final int BUFFER = 2048;
        byte buffer[] = new byte[BUFFER];
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ZipOutputStream zos = new ZipOutputStream(out);
        zos.putNextEntry(new ZipEntry(entryName));
        int length;
        while ((length = in.read(buffer)) >= 0) {
            zos.write(buffer, 0, length);
        }
        zos.closeEntry();
        zos.close();
        return new ByteArrayInputStream(out.toByteArray());
}
于 2013-08-08T11:07:44.230 に答える
2
  1. .toByteArray() を持つ ByteArrayOutputStream で解決しました
  2. ここでも同じで、前述の要素を渡します
于 2013-07-30T12:32:42.883 に答える