Я пытаюсь понять, как новый оператор try-with-resources работает, воссоздавая его с помощью обычных операторов try-catch-finally. Учитывая следующий тестовый класс, использующий Java 7 try-with-resources:
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
public class TryWithResources {
public static void main(String[] args) {
try (GZIPOutputStream gzip = new GZIPOutputStream(System.out)) {
gzip.write("TEST".getBytes("UTF-8"));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
Как бы вы переписали этот класс, чтобы использовать операторы try-catch-finally, которые производят точно такие же байт-код как состояние попытки с ресурсами энт производит? Кроме того, тот же вопрос, когда используются два ресурса, как в следующем примере:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPOutputStream;
public class TryWithResources2 {
public static void main(String[] args) {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(baos)) {
gzip.write("TEST".getBytes("UTF-8"));
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}