59

アプリケーションが SMTP サーバー経由で電子メールを受信して​​います。電子メールには 1 つ以上の添付ファイルがあり、電子メールの添付ファイルは byte[] として返されます (sun javamail api を使用)。

最初にディスクに書き込むことなく、その場で添付ファイルを圧縮しようとしています。

この結果を達成するための可能な方法は何ですか?

4

8 に答える 8

151

Java の java.util.zip.ZipOutputStream を使用して、メモリ内に zip ファイルを作成できます。例えば:

public static byte[] zipBytes(String filename, byte[] input) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ZipOutputStream zos = new ZipOutputStream(baos);
    ZipEntry entry = new ZipEntry(filename);
    entry.setSize(input.length);
    zos.putNextEntry(entry);
    zos.write(input);
    zos.closeEntry();
    zos.close();
    return baos.toByteArray();
}
于 2008-12-10T22:48:17.693 に答える
0

多分java.util.zipパッケージがあなたを助けるかもしれません

バイト配列から変換する方法について質問しているので、(テストされていない)ByteArrayInputStream メソッドを使用できると思います

int     read(byte[] b, int off, int len)
          Reads up to len bytes of data into an array of bytes from this input stream.

あなたが食べます

ZipInputStream  This class implements an input stream filter for reading files in the ZIP file format.
于 2008-12-10T22:36:58.420 に答える
0

そのためには ZipOutputStream を使用する必要があります。

http://java.sun.com/javase/6/docs/api/java/util/zip/ZipOutputStream.html

于 2008-12-10T22:42:24.663 に答える