Ich möchte nur ein FileInputStream
in ein konvertieren InputStream
. Wie kann ich das tun?
z.B
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?;
fis.close();
java
fileinputstream
Ranjan
quelle
quelle
File
Klasse zu Klasse zu suchenInputStream
. Ihre Bearbeitung legt nahe, dass der Autor dies (zumindest teilweise) verlangt, und es ist nicht richtig.Antworten:
Normalerweise lesen Sie zuerst aus dem Eingabestream und schließen ihn dann. Sie können den FileInputStream in einen anderen InputStream (oder Reader) einbinden. Es wird automatisch geschlossen, wenn Sie den Wrapping-Stream / Reader schließen.
Wenn dies eine Methode ist, die einen InputStream an den Aufrufer zurückgibt, liegt es in der Verantwortung des Aufrufers, den Stream zu schließen, wenn er damit fertig ist. Wenn Sie es in Ihrer Methode schließen, kann der Anrufer es nicht verwenden.
Um einige Ihrer Kommentare zu beantworten ...
Um den Inhalt von InputStream an einen Remote-Consumer zu senden, schreiben Sie den Inhalt des InputStream in einen OutputStream und schließen dann beide Streams.
Der Remote-Consumer weiß nichts über die von Ihnen erstellten Stream-Objekte. Er erhält nur den Inhalt in einem InputStream, den er erstellt, liest und schließt.
quelle
quelle
quelle
FileInputStream ist ein inputStream.
Natürlich wird dies nicht das tun, was Sie wollen ; Der von Ihnen zurückgegebene Stream wurde bereits geschlossen. Geben Sie einfach den FileInputStream zurück und fertig. Der aufrufende Code sollte ihn schließen.
quelle
fis
obwohl ich nicht sicher bin, ob ich einen geschlossenen Stream zurückgeben soll.fis
- Sie schließen auchis
return FileInputStream("c://filename");
in der Methode, deren Rückgabetyp istInputStream
Wenn Sie einen Stream in einen anderen einbinden, schließen Sie keine Zwischen-Streams, und das ist sehr wichtig: Sie schließen sie nicht, bevor Sie die äußeren Streams nicht mehr verwenden. Weil du auch den äußeren Strom schließen würdest.
quelle