Эти потоки в java не нужно закрывать, сколько вы знаете?

Java

Когда-то java-программист должен помнить правило, что поток должен быть закрыт, когда он израсходован, и он должен быть записан наfinallyвнутри.

finally {
	out.flush();
 	out.close();
}

Но недавно обнаружил, что поток не нужно закрывать. этоByteArrayOutputStream, и конечно его сестраByteArrayInputStreamи двоюродный братStringWriter. По этой же причине мы не будем обсуждать родственников. В качестве OutputStream он такжеextendsохватыватьOutputStream, естественно тоже досталосьflush()а такжеclose(). Но тело метода этих двух методов пусто.

    /**
     * Closing a <tt>ByteArrayOutputStream</tt> has no effect. The methods in
     * this class can be called after the stream has been closed without
     * generating an <tt>IOException</tt>.
     */
    public void close() throws IOException {
    }
    
    /***
    * OutputStream的方法,ByteArrayInputStream并未重写
    */
    public void flush() throws IOException {
    }    

Причину понять нетрудно. По сути, внутренняя реализация ByteArrayInputStream представляет собой байтовый массив, который основан на доступе к байтовым данным в памяти. Он не занимает жесткий диск, сеть и другие ресурсы. Даже если он не закрыт, сборщик мусора переработает его, когда он израсходуется. Это ничем не отличается от обычных массивов. Поскольку это оперативная память, необходимо учитывать размер памяти, если поток байтов слишком велик, необходимо учитывать ситуацию переполнения памяти.

Однако, как программист с болью в яйце, это хорошая привычка привычно закрывать поток.Что бы ни случилось, сначала закройте его, а затем произнесите это.Теперь close это пустой метод. Это тоже безобидная вещь для Бейли, так же как и продукт для здоровья, употребление которого не вылечит болезнь, но и вреда от того, что вы его съедите, не будет.

  • Вывод таков: поток, указывающий на память, не нужно закрывать, а поток, указывающий на внешние ресурсы, такие как жесткий диск/сеть, должен быть закрыт.

Эта статья была включена вЭти потоки в java закрывать не надо, знаете несколько