Что такое эквивалент байт-кода в Java 7 try-with-resources с использованием try-catch-finally?

Я пытаюсь понять, как новый оператор 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();
        }
    }
}

20
задан Dan Cruz 22 October 2011 в 14:12
поделиться