不是GZIP格式的Java

时间:2014-03-01 17:24:26

标签: java gzip unzip compression

我正在尝试从互联网上下载.torrent文件。一些在线文件是压缩(gzip)格式。我知道我可以使用以下代码解压缩文件:

    try (InputStream is = new GZIPInputStream(website.openStream())) {
        Files.copy(is, Paths.get(path));
        is.close();
    }

但是有些.torrent文件没有被压缩,因此我收到错误消息:

java.util.zip.ZipException: Not in GZIP format

我正在处理一个.torrent文件的大型数据库,因此如果它被压缩,我就无法将它们解压缩1。我如何知道.torrent文件是否被压缩,只有压缩后才解压缩文件?

伪代码:

if(file is compressed){
unzip
download
}else{
download

解决方案:

    try (InputStream is = new GZIPInputStream(website.openStream())) {
        Files.copy(is, Paths.get(path + "GZIP.torrent"));
        is.close();
    } catch (ZipException z) {
        File f = new File(path + ".torrent");
        FileOutputStream fos = new FileOutputStream(f);
        ReadableByteChannel rbc = Channels.newChannel(website.openStream());
        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
        fos.close();
    }

1 个答案:

答案 0 :(得分:2)

您可以使用BufferedInputStream。无论如何,这可能是一个好主意。这将允许您标记()开始并尝试解压缩数据,如果失败,则重置()流并正常读取。 (更有效率,所有GZIP文件都以相同的两个字节开头);)

所有GZIP流都以字节1f 8b http://en.wikipedia.org/wiki/Gzip

开头