2

コードで

GZIPInputStream gzis= new GZIPInputStream(bais);
byte[] bBodyUnzipped= new byte[10240];
gzis.read(bBodyUnzipped);

、解凍されたファイルの長さを知ることで、ディスク容量の使用を最適化し、大きなバイト[]を作成しないようにするにはどうすればよいですか?

この回答によると、そのような方法はありません。

アイデアは、このバイト[]を呼び出しに使用することです

CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
String sBodyUnzipped= decoder.decode(ByteBuffer.wrap(bBodyUnzipped)).toString();

このため、すべてのコンテンツを含み、余分なゼロがない bytye[] が必要です。

4

6 に答える 6

1

Apache commons IOUtils をそのまま使用することはできませんか?

于 2013-04-16T13:28:50.493 に答える
1

より小さいbyte配列に読み取ります。

于 2013-04-16T13:22:48.287 に答える
0
public  byte[] readGZFile(File file) {

    byte[] fileData = null;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    GZIPInputStream in = null;
    try {
        in = new GZIPInputStream(new FileInputStream(file));
        int bufsize=1024;
        byte [] buf=new byte[bufsize];
        int readbytes=0;
        readbytes=in.read(buf);
        while(readbytes!=-1){
            baos.write(buf, 0,readbytes);
            readbytes=in.read(buf);
        }
        baos.flush();
        return baos.toByteArray();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return fileData;
}
于 2014-12-28T10:31:39.883 に答える
0

私はあなたがこれを望んでいると思います:

    public void gzip(String path) {
            GZIPInputStream in = null;
            try {
                in = new GZIPInputStream(
                        new FileInputStream(new File(path)));
                byte[] read = new byte[in.available()];
                in.read(read);
                System.out.println(read);
            }catch (Exception e) {
                System.out.println(e);
            }
            finally {
                try {
                    in.close();
                }catch (Exception e) {
                    System.out.println(e);
                }
            }
        }

詳細については、http: //docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.htmlを参照してください。

于 2013-04-17T14:52:41.253 に答える
0

zip にバイナリ情報が含まれている場合は、バイト単位で処理できます

    InputStream is = new BufferedInputStream(new GZIPInputStream(
            new FileInputStream("zip")));
    for (int b; (b = is.read()) != -1;) {
        // process byte
    }

zip がテキストの場合、1 行ずつ処理します。

    Scanner sc = new Scanner(new GZIPInputStream(new FileInputStream("zip")));
    while(sc.hasNextLine()) {
        String line = sc.nextLine();
        // process line
    }
于 2013-04-16T13:31:00.033 に答える