2012-04-01 49 views
0

私はそうのようなコードの部分を持っている...ファイルを解凍してjavaのByteBufferに読み込むにはどうすればよいですか?

FileInputStream fi = new FileInputStream(filein); 
GZIPInputStream gzis = new GZIPInputStream(fi); 
ByteBuffer bbuffer = ByteBuffer.allocate(115200); 

fi.available()は84300ですが、gzis.available()は1 file(filein)がすでに圧縮されています。

私はファイルを読んで、解凍して、最後にそれをByteBuffer bbuferに入れたいと思います。

どうすればこの操作を実現できますか?

+0

*「THX 4」*「感謝」や「for」などのすべての文字のスペルを今後ありがとうございます。これはテクニカルサイトであり、テキストメッセージやTwitterではありません。 –

+0

あなたの質問に答えられた場合、またはそれがもはや有効でない場合は、誰もが問題が解決されたことを知るように、最も適切な回答を選択するために「チェック」してください。ありがとう。 – wattostudios

答えて

0

gzis.available() = 1;は、問題があるわけではありません。単純に、Streamから1バイトの情報しか読み取れず、続行することができます。圧縮されていないファイル全体が単一のコマンドで使用可能になるとは期待できません。

ファイル全体を読み取るには、すべてのデータを取得するまでInputStreamを読み込み続けるループが必要です。あなたが圧縮されていないファイルの最終的なサイズがわからない場合、あなたがより多くを必要とする場合たとえば、もちろん...

int bytesRead = 0; 
int bytesAvailable = gzis.available(); 
while (bytesAvailable > 0){ 
    gzis.read(bbuffer,bytesRead,bytesAvailable); 
    bytesRead += bytesAvailable; 
    bytesAvailable = gzis.available(); 
} 

、あなたのbbufferのサイズを変更できるようにするために余分なコードを追加する必要がありますルーム。

+0

BufferedOutputStream bos =新しいBufferedOutputStream(新しいGZIPOutputStream(新しいFileOutputStream(out))、1024 * 8); bos.write(buffer.array());だから、仲間、私はこのようなファイルを圧縮すると、そうですか? – Hexor

+0

'buffer.array()'ビットについてはわかりません。***バッファ***が何であるかによって異なります。 'bos.write(buffer);を呼び出す必要があるだけです' GZIPOutputStream'にすでにバッファが入っているので、おそらく 'BufferedOutputStream'は必要ありません。しかし、あなたが望むならば 'BufferedOutputStream'をそこに残すことを傷つけることはありません。 – wattostudios

関連する問題