【问题标题】:How to convert FileInputStream to InputStream? [closed]如何将 FileInputStream 转换为 InputStream? [关闭]
【发布时间】:2012-06-19 12:14:11
【问题描述】:

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

例如

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

【问题讨论】:

  • 兰詹。您能否更改此帖子的正确答案。目前的答案是低于标准的。如果您将其更改为以下最佳值。
  • 这只是一个愚蠢的问题..我对序列化没有正确的想法......任何人都可以参考@sudocode
  • 这可能是一个愚蠢的问题,但很多人仍然参考这个问题,因为它很有用。
  • @WilliMentzel 我来这里是为了寻找从File 类到InputStream 的实际转换。您的编辑表明这是作者(至少部分)要求的,这是不对的。
  • @Line 我只是改变了格式我不认为我改变了意思。如果您仍然反对,请随时回滚我的更改。届时,社区将对此进行审查。顺便问一句:除了现在的问题,你怎么知道作者的意思?

标签: java fileinputstream


【解决方案1】:
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;

【讨论】:

  • 为什么在最后返回"is"之前调用"is.close()"。
【解决方案2】:
InputStream is = new FileInputStream("c://filename");
return is;

【讨论】:

  • 这就是答案!
【解决方案3】:

FileInputStream 是一个输入流。

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

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

【讨论】:

  • 或者只是返回 fis 虽然我不确定返回一个封闭的流。
  • 这很愚蠢——如果你关闭fis——你也会关闭is
  • 如果我关闭文件数据不发送
  • @RonK 确实如此。这就是我提到它的原因。
  • 在返回类型为InputStream的方法中只是一个更简短的代码return FileInputStream("c://filename");
【解决方案4】:

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

如果这是一个将 InputStream 返回给调用者的方法,那么调用者有责任在完成流时关闭它。如果你在你的方法中关闭它,调用者将无法使用它。

回答你的一些cmets...

要将 InputStream 的内容发送到远程消费者,您需要将 InputStream 的内容写入 OutputStream,然后关闭两个流。

远程消费者对您创建的流对象一无所知。他只是在他将创建、读取和关闭的 InputStream 中接收内容。

【讨论】:

  • 如果我想通过邮件发送输入流怎么办。 ..是否可以在另一边关闭..或者不需要关闭
  • 流对象本身不可序列化。流的内容可以序列化 - 通过将内容写入 OutputStream
  • 实际上我的目标是发送一个文件..我不希望任何东西在我发送后运行..例如好像我在发送一个字符串..这样对方就不用担心关闭任何东西了。
  • 文件也不能序列化。但是文件的内容可以使用 OutputStream 进行序列化。
  • 是否有可能我会等待一些特定的时间然后关闭输入流,例如取决于文件的大小
【解决方案5】:

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

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 2011-04-12
    • 2011-12-12
    • 2011-02-19
    • 2013-06-11
    • 2016-04-11
    相关资源
    最近更新 更多