我有一些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 block 由IntelliJ 自动生成。我应该捕获哪些其他类型的异常:连接中断
、收到部分数据
、连接超时
。这些都是我能想到的问题。你能想到别人吗?
最佳答案
如果到达 read()
返回 -1 的位置,则表示您已发送了整个文件。
但不要将其收集在内存中:每次获得一 block 时都用它做一些有用的事情:即发送它,或将其写入文件,或其他什么。
您不需要捕获更多异常,任何 IOExceptions
都表明存在某种问题。
关于Java检测连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43133459/