监视Java中的GZip下载进度
我在java应用程序中下载了一些文件,并实现了一个下载监视器对话框。但是最近我用gzip压缩了所有的文件,现在下载监视器坏了 我以监视Java中的GZip下载进度,java,download,gzip,monitor,progress,Java,Download,Gzip,Monitor,Progress,我在java应用程序中下载了一些文件,并实现了一个下载监视器对话框。但是最近我用gzip压缩了所有的文件,现在下载监视器坏了 我以gzip输入流的形式打开该文件,并在每下载一kB后更新下载状态。如果文件大小为1MB,则进度将上升到例如4MB,这是未压缩的大小。我想监控压缩下载进度。这可能吗 编辑:澄清一下:我正在从GZipInputStream读取未压缩的字节。因此,这并没有给我正确的文件大小在最后 这是我的密码: URL url = new URL(urlString); HttpURLCon
gzip输入流
的形式打开该文件,并在每下载一kB后更新下载状态。如果文件大小为1MB,则进度将上升到例如4MB,这是未压缩的大小。我想监控压缩下载进度。这可能吗
编辑:澄清一下:我正在从GZipInputStream读取未压缩的字节。因此,这并没有给我正确的文件大小在最后
这是我的密码:
URL url = new URL(urlString);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.connect();
...
File file = new File("bibles/" + name + ".xml");
if(!file.exists())
file.createNewFile();
out = new FileOutputStream(file);
in = new BufferedInputStream(new GZIPInputStream(con.getInputStream()));
byte[] buffer = new byte[1024];
int count;
while((count = in.read(buffer)) != -1) {
out.write(buffer, 0, count);
downloaded += count;
this.stateChanged();
}
...
private void stateChanged() {
this.setChanged();
this.notifyObservers();
}
谢谢你的帮助 根据规范,是的一个子类<代码>充气输入流有一个用于解压缩工作的字段。应该对你的目的特别有用 不幸的是,
gzip输入流
没有公开inf
,因此您可能必须创建自己的子类并公开充气器
,例如
public final class ExposedGZIPInputStream extends GZIPInputStream {
public ExposedGZIPInputStream(final InputStream stream) {
super(stream);
}
public ExposedGZIPInputStream(final InputStream stream, final int n) {
super(stream, n);
}
public Inflater inflater() {
return super.inf;
}
}
...
final ExposedGZIPInputStream gzip = new ExposedGZIPInputStream(...);
...
final Inflater inflater = gzip.inflater();
final long read = inflater.getBytesRead();
我正在读取由
GZipInputStream
下载的字节,它是未压缩的流。所以这不是下载的真实文件大小。谢谢!我刚刚实现了一个定制的GZIPInputStream,它使得充气机int
的getBytesRead()
可用。谢谢,这正是我想要的!