如何将FileInputStream转换为InputStream?[关闭]


116

我只想将a转换为FileInputStream,该InputStream怎么办?

例如

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

3
ranjan。能否请您更改此帖子的正确答案。目前的答案是低于标准的。如果将其更改为以下值,那将是最佳选择。
Whitecat

这只是一个愚蠢的问题。.我对序列化没有正确的想法...任何人都可以参考@sudocode
ranjan

4
这可能是一个愚蠢的问题,但是许多人仍然引用此问题,因为它很有用。
Whitecat

1
@WilliMentzel我来这里是为了寻找从File类到的实际转换InputStream。您的编辑建议这(至少部分是作者)所要的,这是不对的。
在线

@Line我只是改变了格式,我认为我没有改变含义。如果您仍然反对,请随时回滚我的更改。然后,社区将对此进行审查。顺便说一句:除了现在的问题是什么,您如何知道作者的意思?
Willi Mentzel '18

Answers:


7

通常,您通常会先从输入流中读取然后关闭它。您可以将FileInputStream包装在另一个InputStream(或Reader)中。关闭包装的流/阅读器时,它将自动关闭。

如果这是将InputStream返回给调用方的方法,则在完成流后,调用方有责任关闭流。如果您使用方法关闭它,则调用者将无法使用它。

要回答您的一些评论...

要将InputStream的内容发送到远程使用者,您可以将InputStream的内容写入OutputStream,然后关闭两个流。

远程使用者对您创建的流对象一无所知。他只是在InputStream中接收内容,然后创建,读取并关闭它。


如果我想通过邮件发送输入流怎么办。..是否可以在另一侧关闭..或无需关闭
ranjan 2012年

2
流对象本身不可序列化。流的内容可以序列化-通过将内容写入OutputStream
sudocode'Jun

实际上,我的目标是发送文件..发送后我不希望任何东西运行..例如,就像我正在发送字符串..这样,另一端不必担心关闭任何东西。
ranjan 2012年

1
文件也不可序列化。但是可以使用OutputStream序列化文件的内容。
sudocode

是否有可能我会等待一些特定的时间,然后关闭inputstream,例如,取决于文件的大小
ranjan 2012年

135
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”之前调用“ is.close()”。
Talespin_Kit


36

FileInputStream 一个inputStream。

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

当然,这不会做您想做的事;您返回的流已关闭。只需返回FileInputStream并完成它。调用代码应将其关闭。


或只是返回,fis尽管我不确定是否要返回关闭的流。
Bala R

6
这很愚蠢-如果您关闭fis-您也会关闭is
RonK 2012年

1
如果我关闭文件数据不发送
ranjan 2012年

2
确实是@RonK。这就是为什么我提到它。
Joeri Hendrickx 2012年

3
return FileInputStream("c://filename");该方法的返回代码为InputStream
Yatendra Goel

2

如果将一个流包装到另一个流中,则不会关闭中间流,这非常重要:在完成使用外部流之前,不要关闭它们。因为您也将关闭外部流。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.