我有以下两个代码块,我用它们来压缩字符串。
代码1
public static String compressResponse(String response) throws IOException {
Deflater deflater = new Deflater(Deflater.DEFLATED, true);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream, deflater);
try {
deflaterOutputStream.write(response.getBytes(StandardCharsets.UTF_8));
return Base64.encodeBytes(byteArrayOutputStream.toByteArray(), Base64.DONT_BREAK_LINES);
} finally {
deflaterOutputStream.close();
}
}
代码2
public static String compressResponse(String response) throws IOException {
Deflater deflater = new Deflater(Deflater.DEFLATED, true);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream, deflater);
try {
deflaterOutputStream.write(response.getBytes(StandardCharsets.UTF_8));
} finally {
deflaterOutputStream.close();
}
return Base64.encodeBytes(byteArrayOutputStream.toByteArray(), Base64.DONT_BREAK_LINES);
}
只有第二种方法可以正常工作,而第一种方法始终返回空字符串。我理解这种不同的行为是由于返回 block 相对于finally block 的不同放置而发生的。其具体行为是什么?
最佳答案
在第二个示例中,byteArrayOutputStream
被填充,因为 deflaterOutputStream
已关闭并刷新。
关于java - 尝试内和尝试后返回位置时的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36812105/