2012-06-19 2 views
99

FileInputStream으로 변환하고 싶습니다. 어떻게해야합니까?InputStream에 파일

예컨대

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

내가 fis을 닫을 수 있습니다 또는 FileInputStream에 변환 할 수있는 다른 방법이되도록하는 방법, InputStreamFileInputStream를 변환하는?

+2

ranjan. 이 게시물의 정답을 바꿀 수 있습니까? 현재 대답은 subpar입니다. 아래 내용으로 변경하면 최적 상태가됩니다. – Whitecat

+0

그것은 단지 어리석은 질문이었습니다. 나는 직렬화에 대한 적절한 생각이 없었습니다 ... 어느 누구도 @sudocode를 참조 할 수 있습니다. – ranjan

+4

아마도 어리석은 질문 일지 모르지만 많은 사람들은 유용하기 때문에이 질문을 참조하십시오. – Whitecat

답변

5

일반적으로 먼저 입력 스트림에서 읽은 다음 닫습니다. FileInputStream를 다른 InputStream (또는 Reader)로 랩 할 수 있습니다. 배치 스트림/판독기를 닫으면 자동으로 닫힙니다.

호출자에게 InputStream을 반환하는 메서드 인 경우 호출자는 스트림을 끝낼 때 스트림을 닫아야합니다. 당신의 방법으로 그것을 닫으면, 발신자는 그것을 사용할 수 없습니다.

는 OutputStream에로의 InputStream의 내용을 작성,

원격 소비자에게 내용의 InputStream를 보내려면 ... 귀하의 의견의 일부에 답하고 스트림을 모두 닫습니다.

원격 사용자는 사용자가 만든 스트림 개체에 대해 아무것도 모릅니다. 그는 콘텐트를 생성하고, 읽고, 닫을 InputStream에서 콘텐트를 수신한다.

+0

메일을 통해 inputstream을 보내고 싶습니다. .. 다른 쪽에서 닫을 수 있습니까 아니면 닫을 필요가 없습니다 – ranjan

+2

스트림 객체 자체가 직렬화되지 않습니다. 스트림의 내용은 출력 스트림에 내용을 쓰는 방식으로 직렬화 할 수 있습니다. – sudocode

+0

사실 내 목표는 파일을 보내는 것입니다. 보내면 아무것도 실행하지 않으려합니다. 마치 문자열을 보내는 것처럼 .. 다른 쪽에서는 아무것도 닫을 필요가 없다. – ranjan

33

FileInputStream 은 입력 스트림입니다. 물론

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

, 이 당신이를 수행 할 작업을하지 않을 것이다; 반환하는 스트림은 이미 닫혔습니다. 그냥 FileInputStream을 반환하고 함께 할 수 있습니다. 호출 코드가이를 닫아야합니다. 다른에 하나 개의 스트림을 포장하는 경우

+0

또는 확실하지 않지만'fis'를 반환합니다. 닫힌 스트림을 반환하는 방법에 대해 설명합니다. –

+4

이것은 바보입니다.'fis'를 닫으면 - 또한 닫습니다. '파일이 닫히면 – RonK

+1

이 전송되지 않습니다. – ranjan

46
InputStream is = new FileInputStream("c://filename"); 
return is; 
2

, 당신은 중간 스트림, 매우 중요한을 닫지 마십시오 : 당신은 외부 스트림을 사용하여 마무리하기 전에를 닫지 마십시오. 왜냐하면 당신도 바깥 냇물을 닫을 것이기 때문입니다.

122
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; 
+8

"is"가 끝나기 전에 "is.close()"가 호출되는 이유는 무엇입니까? –

관련 문제