Закрытие потока Gson - PullRequest
       43

Закрытие потока Gson

0 голосов
/ 28 января 2020

Закрывается ли поток, когда вы используете что-то вроде:

gson.toJson(obj, new FileWriter("C:\\fileName.json"));

или лучше:

        try (Reader reader = new FileReader("c:\\test\\staff.json")) {

            // Convert JSON File to Java Object
            Staff staff = gson.fromJson(reader, Staff.class);

            // print staff 
            System.out.println(staff);

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

Я знаю, что блок try закрывает поток, но делает Первый пример также закрывает поток?

Код взят из Mkyong

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Закрывается ли поток, когда вы используете что-то вроде:

gson.toJson(obj, new FileWriter("C:\\fileName.json"));

Нет. Вы должны закрыть его с помощью try-with-resources или блока try-catch-finally.


Начиная с JDK 7, предпочтительный способ закрыть AutoClosable - это использовать try-with-resources (например, во втором фрагменте):

try (FileWriter writer = new FileWriter("C:\\fileName.json")) {
    gson.toJson(obj, writer);
} catch (IOException e) {
    e.printStackTrace();
}

Или вы можете позвонить close(), используя блок try-catch-finally:

FileWriter writer = null;
try {
    writer = new FileWriter("C:\\fileName.json");
    gson.toJson(obj, writer);
} catch (IOException e) {
    e.printStackTrace();
} finally {
    if (writer != null) {
        try {
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
0 голосов
/ 28 января 2020

FileWriter реализует AutoClosable, поэтому его необходимо закрыть. Если имя не указано, оно не закроется автоматически.

...