このウェブサイトが大好きです!私の問題は次のとおりです。
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 から読み取っているバイト数を確認する必要がありますか?
前もって感謝します!