Лог c выглядит так:
try (InputStream inputStream = session.readRaw(remotePath)) {
callback.doWithInputStream(inputStream);
return session.finalizeRaw();
}
, чтобы закрыть InputStream
и освободить удаленные ресурсы. Здесь callback
- это просто перехватчик конечного пользователя для приема этого потока данных удаленного файла. Нет никаких проблем с многопоточностью, поскольку сеанс не используется совместно.
Конечно, мы не можем гарантировать, что предоставленный InputStreamCallback
impl является потокобезопасным. Хотя когда вы передаете этот inputStream
другому потоку в этом обратном вызове, он будет закрыт и сеанс будет освобожден. Следовательно, ваш другой поток будет страдать от устаревшей ссылки InputStream
.
Я не уверен, что вас беспокоит по поводу обратного вызова, поскольку это не то, что делает структура. Вы предоставляете это значение, когда звоните по этому номеру get(String remotePath, InputStreamCallback callback)
.