Как преобразовать FileInputStream в InputStream? [закрыто]


116

Я просто хочу преобразовать a FileInputStreamв InputStream, как я могу это сделать?

например

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?; 
fis.close();

3
Ranjan. Не могли бы вы изменить правильный ответ на этот пост. Текущий ответ некачественный. Если вы измените его на тот, который ниже, это будет оптимальным.
Whitecat

Это был просто глупый вопрос ... У меня не было правильного представления о сериализации ... любой может сослаться на @sudocode
ранджан

4
это может быть глупый вопрос, но многие люди по-прежнему обращаются к нему, потому что он полезен.
Whitecat 03

1
@WilliMentzel Я пришел сюда в поисках фактического преобразования из Fileкласса в InputStream. Ваше редактирование предполагает, что автор просит именно об этом (по крайней мере, частично), и это неправильно.
Строка

@Line Я просто изменил форматирование, не думаю, что изменил значение. Если вы все еще возражаете, не стесняйтесь откатывать мои изменения. Затем это будет рассмотрено сообществом. Кстати: откуда вы знаете, что имел в виду автор, кроме того, какой сейчас вопрос?
Вилли Ментцель

Ответы:


7

Обычно вы сначала читаете из входного потока, а затем закрываете его. Вы можете обернуть FileInputStream в другой InputStream (или Reader). Он будет автоматически закрыт, когда вы закроете поток / ридер упаковки.

Если это метод, возвращающий InputStream вызывающей стороне, то ответственность за закрытие потока по завершении с ним лежит на вызывающей стороне. Если вы закроете его в своем методе, вызывающий не сможет его использовать.

Чтобы ответить на некоторые ваши комментарии ...

Чтобы отправить содержимое InputStream удаленному потребителю, вы должны записать содержимое InputStream в OutputStream, а затем закрыть оба потока.

Удаленный потребитель ничего не знает о созданных вами объектах потока. Он просто получает контент в InputStream, который он создаст, прочитает и закроет.


что, если я хочу отправить поток ввода по почте. .. можно ли закрыть с другой стороны .. или его не нужно закрывать
ранджан

2
Сам объект потока не сериализуем. Содержимое потока можно сериализовать - записав содержимое в OutputStream
Sudocode

На самом деле моя цель - отправить файл ... Я не хочу, чтобы что-либо запускалось после отправки ... например, как будто я отправляю строку ... чтобы другой стороне не нужно было беспокоиться о закрытии чего-либо.
Ranjan

1
Файл также не сериализуем. Но содержимое файла можно сериализовать с помощью OutputStream.
Sudocode

возможно ли, что я подожду какое-то определенное время, а затем
закрою поток ввода

136
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;

12
Почему вызывается is.close () до того, как в конце возвращается is.
Talespin_Kit 09


36

FileInputStream - это inputStream.

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = fis;
fis.close();  
return is;

Конечно, это не будет делать то, что вы хотите ; поток, который вы возвращаете, уже закрыт. Просто верните FileInputStream и покончите с этим. Вызывающий код должен закрыть его.


или просто вернуться, fisхотя я не уверен в возвращении закрытого потока.
Bala R

6
Это глупо - если закрыть fis- то и закрытьis
RonK

1
если я
закрою

2
@RonK действительно. Вот почему я упоминаю об этом.
Joeri Hendrickx

3
Просто более краткий код return FileInputStream("c://filename");метода с типом возвращаемого значенияInputStream
Ятендра Гоэль

2

Если вы переносите один поток в другой, вы не закрываете промежуточные потоки, и это очень важно: вы не закрываете их до завершения использования внешних потоков. Потому что вы бы тоже закрыли внешний поток.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.