我有一些Java代码,可以从URL读取gzip文件并将其解压缩。如何确保从连接中读取了整个文件,或者如何确保没有问题?

try {
    URL url = new URL("http://example.com/de?Debug=1");
    URLConnection myUrlConnection = url.openConnection();
    GZIPInputStream gZIPInputStream = new GZIPInputStream(myUrlConnection.getInputStream());
    StringBuffer decompressedStringBuffer = new StringBuffer();
    int bytes_read;
    while ((bytes_read = gZIPInputStream.read(buffer)) > 0) {
        String part = new String(buffer, 0 ,bytes_read, "UTF-8");
            decompressedStringBuffer.append(part);
        }
        gZIPInputStream.close();
        String decompressedString = decompressedStringBuffer.toString();

        ...

} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}


try-catch块由IntelliJ自动生成。我还应该涵盖哪些其他类型的异常:connection breakpartial data receivedconnection timeout。这些都是我能想到的问题。你能想到别人吗?

最佳答案

如果到达read()返回-1的位置,则说明已发送了整个文件。

但是请不要将其收集在内存中:每次获取一块时都要对其做一些有用的事情:即将其发送或写入文件,或其他任何方式。

您不需要捕获更多的异常,任何IOExceptions都可以指示一种或另一种麻烦。

07-27 15:05