如何将FileInputStream转换为InputStream?

ran*_*jan 115 java fileinputstream

我只是想一个转换FileInputStream到一个InputStream,我该怎么办呢?

例如

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?; 
fis.close();
Run Code Online (Sandbox Code Playgroud)

Kum*_*tra 133

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;
Run Code Online (Sandbox Code Playgroud)

  • 为什么在最后返回"is"之前调用"is.close()". (12认同)

Sum*_*ngh 54

InputStream is = new FileInputStream("c://filename");
return is;
Run Code Online (Sandbox Code Playgroud)

  • 那就是答案! (2认同)

Joe*_*ckx 35

FileInputStream 一个inputStream.

FileInputStream fis = new FileInputStream("c://filename");
InputStream is = fis;
fis.close();  
return is;
Run Code Online (Sandbox Code Playgroud)

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

  • 这是愚蠢的 - 如果你关闭`fis` - 你也关闭`is` (6认同)
  • 只是一个更简短的代码`return FileInputStream("c:// filename");`在返回类型为`InputStream`的方法中 (3认同)
  • @RonK确实。这就是我提到它的原因。 (2认同)

sud*_*ode 6

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

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

回答你的一些评论......

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

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

  • 流对象本身不可序列化.可以序列化流的内容 - 通过将内容写入OutputStream (2认同)