| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Правильное использование потоков. |
| Автор: Illdisposed 15.9.2012, 13:05 | ||
| Здравствуйте! Изучаю Java, но до конца не могу понять работу с потоками. Вот например код из библиотеки:
Я не понимаю тут все нормально с потоками, ничего не надо закрывать? Честно сказать подобный код довольно часто встречается. Прошу прощения за такой вопрос, буду рад если ответите. |
| Автор: COVD 15.9.2012, 17:28 |
| Если метод предполагает однократное использование, то логично, если метод сам освободит все ресурсы по завершению. Создали райтер, записали один раз, райтер выбросили. |
| Автор: Illdisposed 16.9.2012, 17:01 |
| А то, что ByteArrayOutputStream data не закрывается в конце, это нормально? И поток, который создает вызов ImageIO.createImageOutputStream(data) не закрывается, тоже нормально? |
| Автор: COVD 16.9.2012, 17:27 |
| Наверное, нормально. Closing a ByteArrayOutputStream has no effect. -> http://docs.oracle.com/javase/1.4.2/docs/api/java/io/ByteArrayOutputStream.html#close() |
| Автор: Illdisposed 16.9.2012, 17:45 |
| COVD, Как я понимаю можно не закрывать и ImageOutputStream который создается с помощью ImageIO.createImageOutputStream? В документации ничего не написано по этому поводу. |
| Автор: jk1 17.9.2012, 10:16 | ||
ImageIO использует более сложный механизм для менеджмента потоков ввода/вывода. При создании с ними ассоциируются коллбэки, закрывающие потоки. То есть ImageOutputStream и ImageInputStream можно закрывать, а можно и нет - тогда классы imageio сделают это за вас как минимум при завершении работы JVM. См также http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/774083387e81/src/share/classes/com/sun/imageio/stream/StreamCloser.java |
| Автор: Illdisposed 19.9.2012, 05:56 |
| jk1, Большое спасибо за объяснения! |