Как мне обрабатывать сторонние потоки ввода / вывода? - PullRequest
2 голосов
/ 23 января 2011

Есть часть проекта, касающаяся в основном потоков ввода / вывода. Поэтому я должен передавать потоки в качестве аргументов и получать их из сторонних библиотек. Я прочитал Хороший дизайн: как передать InputStreams в качестве аргумента? и Закрытие Java InputStreams , но я не уверен на 100%, что сторонние пользователи используют одни и те же значения кодирования и следующие образцы лучших дизайнов (в частности - «тот, кто открывает поток, должен закрыть поток»)

Если предположить, что потоки довольно велики (500 Мб - 3 Гб), и у меня недостаточно ресурсов процессора и памяти, вот несколько вопросов к сообществу java SO:

  1. Должен ли я когда-нибудь пытаться закрыть потоки, полученные из сторонней библиотеки?
  2. Каковы возможные опасные последствия незакрытых потоков (не считая дополнительной рабочей нагрузки GC)
  3. Являются ли эти значения несколько пропорциональными размеру потока?

1 Ответ

2 голосов
/ 23 января 2011
  1. Вы должны закрыть поток, когда он достигнет конца.Если передаваемая библиотека не хочет, чтобы вы это делали, она должна обернуть поток, чтобы игнорировать close ().
  2. Незащищенные потоки оставляют ресурсы открытыми, например, открытый файл не может быть удален.
  3. Размер не важен.
...