Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Правильное использование потоков. 
:(
    Опции темы
Illdisposed
  Дата 15.9.2012, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.3.2012

Репутация: нет
Всего: нет



Здравствуйте!
Изучаю Java, но до конца не могу понять работу с потоками. Вот например код из библиотеки:
Код

private byte[] writeJpeg(BufferedImage image, float quality) throws IOException {
    ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
    JPEGImageWriteParam params = (JPEGImageWriteParam) writer.getDefaultWriteParam();
    params.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
    params.setCompressionQuality(quality);
    ByteArrayOutputStream data = new ByteArrayOutputStream();
    writer.setOutput(ImageIO.createImageOutputStream(data));
    writer.write(null, new IIOImage(image, null, null), params);
    return data.toByteArray();
}

Я не понимаю тут все нормально с потоками, ничего не надо закрывать? Честно сказать подобный код довольно часто встречается.
Прошу прощения за такой вопрос, буду рад если ответите.

Это сообщение отредактировал(а) Illdisposed - 15.9.2012, 13:06
PM MAIL   Вверх
COVD
Дата 15.9.2012, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Если метод предполагает однократное использование, то логично, если метод сам освободит все ресурсы по завершению. Создали райтер, записали один раз, райтер выбросили.   
PM MAIL   Вверх
AntonSaburov
Дата 16.9.2012, 14:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Illdisposed @  15.9.2012,  13:05 Найти цитируемый пост)
Я не понимаю тут все нормально с потоками, ничего не надо закрывать? 

Может быт проблема с передаваемым параметром image - это ссылка на объект и этот объект может быть изменен в тот момент, когда над ним происходит действие.
PM MAIL WWW ICQ   Вверх
Illdisposed
Дата 16.9.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.3.2012

Репутация: нет
Всего: нет



А то, что ByteArrayOutputStream data не закрывается в конце, это нормально? И поток, который создает вызов ImageIO.createImageOutputStream(data) не закрывается, тоже нормально?
PM MAIL   Вверх
COVD
Дата 16.9.2012, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Наверное, нормально.

Closing a ByteArrayOutputStream has no effect. -> http://docs.oracle.com/javase/1.4.2/docs/a...am.html#close()
PM MAIL   Вверх
Illdisposed
Дата 16.9.2012, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.3.2012

Репутация: нет
Всего: нет



COVD
Как я понимаю можно не закрывать и ImageOutputStream который создается с помощью ImageIO.createImageOutputStream? В документации ничего не написано по этому поводу.
PM MAIL   Вверх
jk1
Дата 17.9.2012, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

Как я понимаю можно не закрывать и ImageOutputStream который создается с помощью ImageIO.createImageOutputStream? 


ImageIO использует более сложный механизм для менеджмента потоков ввода/вывода. При создании с ними ассоциируются коллбэки, закрывающие потоки. То есть ImageOutputStream и ImageInputStream можно закрывать, а можно и нет - тогда классы imageio сделают это за вас как минимум при завершении работы JVM. См также StreamCloser


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Illdisposed
Дата 19.9.2012, 05:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.3.2012

Репутация: нет
Всего: нет



jk1
Большое спасибо за объяснения!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0774 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.