このウェブサイトを愛してください!私の問題は以下の通りです:ZipInputStreamは* actual *(すなわち圧縮された)バイトを報告しません
HTTP "PUT"リクエストからネットワークを経由してくるzipファイルを読んでいます。要求ヘッダーは、Content-Lengthが1Mbであることを伝えます。次のコードはZipInputStreamを作成し、現在のディレクトリ内のファイルへのzipの内容を保存します。
ZipInputStream zis = new ZipInputStream(inputStream);
ZipEntry ze;
long totalBytesRead = 0;
while ((ze = zis.getNextEntry()) != null) {
BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(ze.getName()));
byte[] buffer = new byte[4096];
int i;
while ((i = zis.read(buffer)) != -1) {
totalBytesRead+=i;
outStream.write(buffer,0,i);
}
outStream.close();
}
inputStream.close();
全てが言ったと行って、totalBytesRead
約1.5Mbのに等しいです(ファイルの圧縮に応じて、可能性がされている場合何でも!)。私が知りたいのは、実際のバイト数が元のバイト数からどれくらい読み取られたかを調べる方法がある場合です。inputStream
? ze.getSize()
とze.getCompressedSize()
は、すべての圧縮されたエントリについて-1を返します(つまり、それはわかりません)。私は、送信されたzipファイルの何バイトがネットワークから読み込まれたかを示すプログレスバーにこの情報が必要です。
提案?私はおそらく、ZipInputStreamをサブクラス化して、それが何回読み込み中のInputStreamから読み込んでいるかを調べるべきでしょうか?
ありがとうございます!
なぜコンストラクタは保護されていますか? –