FileInputStream을 InputStream으로 변환하는 방법? [닫은]


116

난 그냥 변환하고 싶어 FileInputStreamInputStream내가 그렇게 할 수있는 방법?

예 :

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

3
ranjan. 이 게시물에 대한 정답을 변경해 주시겠습니까? 현재 답변은 이하입니다. 아래 항목으로 변경하면 최적입니다.
Whitecat 2013-10-29

그냥 바보 같은 질문 .. 나는 직렬화에 대한 올바른 생각을 가지고 있지 하였다 ... @sudocode를 참조 할 수 있습니다 하나
란잔

4
어리석은 질문 일 수도 있지만 많은 사람들이이 질문이 유용하기 때문에 여전히이 질문을 참조합니다.
Whitecat

1
@WilliMentzel 나는 File클래스에서 InputStream. 당신의 편집은 그것이 저자가 (적어도 부분적으로) 요구하는 것을 제안하지만 옳지 않습니다.
라인

@Line 나는 단지 형식을 변경했지만 의미를 변경했다고 생각하지 않습니다. 그래도 반대하는 경우 변경 사항을 롤백하십시오. 그러면 커뮤니티에서 검토합니다. 그건 그렇고, 지금 질문이 무엇인지를 제외하고 저자가 의미하는 바를 어떻게 알 수 있습니까?
Willi Mentzel

답변:


7

일반적으로 먼저 입력 스트림에서 읽은 다음 닫습니다. FileInputStream을 다른 InputStream (또는 Reader)으로 래핑 할 수 있습니다. 래핑 스트림 / 리더를 닫으면 자동으로 닫힙니다.

이것이 호출자에게 InputStream을 반환하는 메서드 인 경우, 스트림이 끝났을 때 스트림을 닫는 것은 호출자의 책임입니다. 메서드에서 닫으면 호출자가 사용할 수 없습니다.

귀하의 의견에 답하려면 ...

콘텐츠 InputStream을 원격 소비자에게 보내려면 InputStream의 콘텐츠를 OutputStream에 쓴 다음 두 스트림을 모두 닫습니다.

원격 소비자는 사용자가 만든 스트림 개체에 대해 알지 못합니다. 그는 자신이 만들고 읽고 닫을 InputStream에서 콘텐츠를 수신합니다.


메일을 통해 입력 스트림을 보내려면 어떻게해야합니까? .. 다른 쪽에서 닫을 수
있습니까

2
스트림 개체 자체는 직렬화 할 수 없습니다. 스트림의 내용은 OutputStream에 내용을 작성하여 직렬화 할 수 있습니다.
sudocode

사실 내 목표는 파일을 보내는 것입니다 .. 전송 한 후에는 아무 것도 실행하고 싶지 않습니다. 예를 들어 마치 문자열을 보내는 것처럼 .. 상대방이 아무것도 닫는 것에 대해 걱정할 필요가 없도록합니다.
ranjan

1
파일도 직렬화 할 수 없습니다. 그러나 파일의 내용은 OutputStream을 사용하여 직렬화 할 수 있습니다.
sudocode

내가 특정 시간을 기다린 다음 입력 스트림을 닫을 수 있습니까? 파일 크기에 따라
ranjan

136
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 2011


36

FileInputStream inputStream입니다.

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

물론 이것은 당신이 원하는 것을하지 않을 것입니다 . 반환하는 스트림이 이미 닫혔습니다. FileInputStream을 반환하고 완료하십시오. 호출 코드가이를 닫아야합니다.


또는 fis닫힌 스트림을 반환하는지 확실하지 않지만 반환합니다.
Bala R

6
이 바보 - 당신 경우 가까운 fis- 당신은 또한 가까운is
RonK

1
파일을 닫으면 데이터가 전송되지 않습니다
ranjan

2
참으로 @RonK. 그것이 내가 그것을 언급하는 이유입니다.
Joeri Hendrickx

3
그냥 더 간단한 코드를 return FileInputStream("c://filename");반환 타입 방법에있어서InputStream
Yatendra 고엘

2

한 스트림을 다른 스트림으로 래핑하는 경우 중간 스트림을 닫지 않고 매우 중요합니다. 외부 스트림 사용을 완료하기 전에 닫지 마십시오. 외부 스트림도 닫을 것이기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.