7

Bzip2 アーカイブを作成する必要があります。「Apache ant」からダウンロードした bzip2 ライブラリ。

I use class CBZip2OutputStream: 
String s = .....
CBZip2OutputStream os = new CBZip2OutputStream(fos);
                os.write(s.getBytes(Charset.forName("UTF-8")));
                os.flush();
                os.close();

(使い方の例が見つからなかったので、このように使うことにしました)

ただし、ディスク上に破損したアーカイブが作成されます。

4

2 に答える 2

7

コンテンツを書き込む前に、BZip2 ヘッダー (2 バイト: 'B'、'Z') を追加する必要があります。

//Write 'BZ' before compressing the stream
fos.write("BZ".getBytes());
//Write to compressed stream as usual
CBZip2OutputStream os = new CBZip2OutputStream(fos);
... the rest ...

次に、たとえば、cat compressed.bz2 | bunzip2 > uncompressed.txt*nix システムで bzip されたファイルの内容を抽出できます。

于 2010-12-11T08:16:00.303 に答える
3

例は見つかりませんでしたが、最終的に CBZip2OutputStream の使用方法を理解したので、次の例を示します。

public void createBZipFile() throws IOException{

        // file to zip
        File file = new File("plane.jpg");

        // fichier compresse
        File fileZiped= new File("plane.bz2");

        // Outputstream for fileZiped
        FileOutputStream fileOutputStream = new FileOutputStream(fileZiped);
        fileOutputStream.write("BZ".getBytes());

        // we getting the data in a byte array
        byte[] fileData = getArrayByteFromFile(file);

        CBZip2OutputStream bzip = null;

        try{
            bzip = new CBZip2OutputStream(fileOutputStream );

            bzip.write(fileData, 0, fileData.length);
            bzip.flush() ;
            bzip.close();  

        }catch (IOException ex) {

            ex.printStackTrace();
        }



        fos.close();

    }
于 2012-10-22T13:36:33.450 に答える