Рубрики
Без рубрики

Java 8 – Следует ли нам закрывать поток после использования?

– Java 8 – Должны ли мы закрывать поток после использования?

Только потоки, источником которых является канал ввода-вывода, такой как Файлы.строки (путь, кодировка) должны быть закрыты.

Прочитайте это Потоковые JavaDocs

Потоки имеют метод BaseStream.close() и реализуют автоматическое закрытие, но почти все экземпляры потока на самом деле не нужно закрывать после использования. Как правило, только потоки, источником которых является канал ввода-вывода (например, потоки, возвращаемые файлами.строки (Путь, кодировка)), требуют закрытия. Большинство потоков поддерживаются коллекциями, массивами или генерирующими функциями, которые не требуют специального управления ресурсами. (Если поток действительно требует закрытия, он может быть объявлен как ресурс в инструкции try-with-resources.)

1. Для обычного потока, подобного этому, экземпляр потока не нужно закрывать после использования.

package com.mkyong;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Java8StreamExample {

    public static void main(String[] args) {

        Stream stream = Stream.of("A", "B", "C");

        List filter = stream.filter(x -> !x.equalsIgnoreCase("B"))
			.collect(Collectors.toList());

        // no need close the stream.
        //stream.close();

        System.out.println(filter); // [A, C]

    }

}

2. Для потока, источником которого является канал ввода-вывода, закройте его с помощью попробуйте с помощью ресурсов

package com.mkyong;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Java8StreamIO {

    public static void main(String[] args) {

        String path = "c:\\projects\\app.log";

		// auto close
        try (Stream lines = Files.lines(Paths.get(path))) {

            String content = lines.collect(Collectors.joining(System.lineSeparator()));
            
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

Рекомендации

Оригинал: “https://mkyong.com/java/java-8-should-we-close-the-stream-after-use/”