Chcę tylko przekonwertować a FileInputStream
na InputStream
, jak mogę to zrobić?
na przykład
FileInputStream fis = new FileInputStream("c://filename");
InputStream is = ?;
fis.close();
java
fileinputstream
ranjan
źródło
źródło
File
klasy naInputStream
. Twoja zmiana sugeruje, że o to prosi autor (przynajmniej częściowo) i nie jest to właściwe.Odpowiedzi:
Zwykle najpierw czytasz ze strumienia wejściowego, a następnie go zamykasz. Możesz opakować FileInputStream w inny InputStream (lub Reader). Zostanie automatycznie zamknięty po zamknięciu strumienia opakowywania / czytnika.
Jeśli jest to metoda zwracająca InputStream do obiektu wywołującego, to wywołujący jest odpowiedzialny za zamknięcie strumienia po zakończeniu. Jeśli zamkniesz ją w swojej metodzie, wywołujący nie będzie mógł jej użyć.
Aby odpowiedzieć na niektóre z twoich komentarzy ...
Aby wysłać zawartość InputStream do zdalnego konsumenta, należałoby zapisać zawartość InputStream do OutputStream, a następnie zamknąć oba strumienie.
Odbiorca zdalny nie wie nic o obiektach strumienia, które utworzyłeś. Po prostu odbiera zawartość w InputStream, który utworzy, przeczyta i zamknie.
źródło
źródło
źródło
FileInputStream to inputStream.
Oczywiście nie zrobi to tego, co chcesz ; strumień, który zwracasz, został już zamknięty. Po prostu zwróć FileInputStream i skończ z tym. Kod wywołujący powinien go zamknąć.
źródło
fis
chociaż nie jestem pewien, czy wrócę zamknięty strumień.fis
- również zamknieszis
return FileInputStream("c://filename");
InputStream
Jeśli zawijasz jeden strumień w drugi, nie zamykasz strumieni pośrednich i bardzo ważne: nie zamykasz ich przed zakończeniem korzystania ze strumieni zewnętrznych. Ponieważ zamknąłbyś również zewnętrzny strumień.
źródło