2017-11-23 12 views
2

내가 BufferedReader로와 내가 알고 싶은BufferedReader의 적절한 사용

try (BufferedReader br = new BufferedReader(new FileReader("my_file"))) { 
    ... 
    br.close(); 
} catch(IOException e) { 
    System.out.println(e.getMessage()); 
} 

가지 파일을 읽을 수있는 다음과 같은 스타일을 사용

1가 올바른 위치에 close()인가를?

2`close()에 try..catch을 추가해야합니까? 내가 br에 대한 new을 사용하기 때문에

3은 close()를 호출하기에 충분하다 또는 I는 GC에 대한 br = null를 작성해야?

4- FileReadernew 에드입니다. 따라서 그것을 파괴해야합니까?

답변

4
  1. try-with-resource 문을 사용 했으므로 명시 적으로 스트림을 닫을 필요가 없습니다. 어쨌든 자동으로 닫힙니다. 자원을 사용하여 try-with-resource를 사용하지 않았 으면 close()이 잘못된 위치에 있었던 것입니다. 리소스가 항상 닫혀 있는지 확인하려면 finally 블록에서 close()를 호출해야합니다.
  2. finally 블록에서 close()를 호출하면 체크 된 Exception도 catch해야합니다.리소스와 함께 try-with-resource를 사용하면 괜찮습니다.
  3. 모든 변수는 try 블록의 범위에만 있기 때문에 안전합니다.
  4. BufferedReader는 데코 레이팅 된 Reader를 닫습니다. 명시 적으로 닫아야합니다.
0

1-2- 마지막으로 또는 리소스 블록과 함께 가까이 사용하는 것이 좋습니다. 그렇지 않으면 Exception이 발생하기 전에 Close가 호출되지 않습니다.

3 close()를 호출하면 충분합니다. 객체를 null로 설정해도 참조는 삭제되지 않습니다. GC는 더 이상 객체에 대한 참조가 없으면 객체를 파괴합니다. 따라서 수동으로 개체를 파괴하지 마십시오.

2

코드에서 try-with-resources 문을 사용하고 있습니다. 이 예에서 try-with-resources 문에 선언 된 리소스는 BufferedReader입니다. 선언문은 try 키워드 바로 뒤에 괄호 안에 표시됩니다. BufferedReader 클래스는 Java SE 7 and later에 있으며 java.lang.AutoCloseable 인터페이스를 구현합니다. BufferedReader 인스턴스가 try-with-resource 문에서 선언되기 때문에 에 관계없이 try 문이 일반적으로 또는 갑자기을 완료 여부 폐쇄 될 것입니다. 이 진술에 대한 자세한 내용은 documentation에서 확인할 수 있습니다. 따라서 수정 된 버전은

try (BufferedReader br = new BufferedReader(new FileReader("my_file"))) { 
    // your logic 

} catch (IOException e) { 
    System.out.println(e.getMessage()); 
} 
2

try-with-resources 문을 사용하고 있습니다. Reader에서 명시 적으로 close를 호출 할 필요가 없습니다. 실제로 문서 상태 :

try-with-resources 문은 문이 끝날 때 각 리소스가 닫히도록 보장합니다. java.io.Closeable을 구현하는 모든 객체를 포함하는 java.lang.AutoCloseable을 구현하는 객체는 모두 리소스로 사용할 수 있습니다.

또한 FileReader가 BufferedReader에 의해 장식되고 BufferedReader를 닫으면 FileReader를 닫아야합니다.