Файл для InputStream
Я просто хочу преобразовать File
в InputStream
, как я могу это сделать?
e.g
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?;
fis.close();
Как преобразовать FileInputStream
в InputStream
, так что я могу закрыть fis
или есть какой-либо другой способ преобразования File
в InputStream
?
Ответы
Ответ 1
Обычно вы сначала читаете из входного потока, а затем закрываете его. Вы можете обернуть FileInputStream в другой InputStream (или Reader). Он будет автоматически закрыт при закрытии обтекающего потока/считывателя.
Если это метод, возвращающий InputStream вызывающему, то ответственность за закрытие потока завершается с помощью вызывающего. Если вы закроете его в своем методе, вызывающий абонент не сможет его использовать.
Чтобы ответить на некоторые ваши комментарии...
Чтобы отправить содержимое InputStream удаленному пользователю, вы должны записать содержимое InputStream в OutputStream, а затем закрыть оба потока.
Удаленный потребитель ничего не знает о созданных вами потоковых объектах. Он просто получает контент в InputStream, который он будет создавать, читать и закрывать.
Ответ 2
InputStream is;
try {
is = new FileInputStream("c://filename");
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return is;
Ответ 3
InputStream is = new FileInputStream("c://filename");
return is;
Ответ 4
FileInputStream - это inputStream.
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = fis;
fis.close();
return is;
Конечно, это не будет делать то, что вы хотите сделать; поток, который вы возвращаете, уже закрыт. Просто верните FileInputStream и сделайте это. Код вызова должен закрыть его.
Ответ 5
Если вы переносите один поток в другой, вы не закрываете промежуточные потоки и очень важны: вы не закрываете их до окончания использования внешних потоков. Потому что вы тоже закрываете внешний поток.