코드 최적화

1704 단어

코드 구조를 최적화하기 위해 공공 도구를 써서 흐름을 닫습니다


최근 Guava의 파일 흐름과 관련된 원본 코드를 볼 때 Files 도구 클래스에서 입력과 출력 흐름을 어떻게 닫는지 간혹 볼 수 있다. 학습하는 태도에 따라 이 부분을 따로 정리한다.Files에서 FileByteSource의 read() 메서드에 다음과 같이 정의됩니다.
@Override public byte[] read() throws IOException {
      Closer closer = Closer.create();
      try {
        FileInputStream in = closer.register(openStream());
        return readFile(in, in.getChannel().size());
      } catch (Throwable e) {
        throw closer.rethrow(e);
      } finally {
        closer.close();
      }
    }

Closer 사용법 보셨어요?매우 유용하다고 생각되므로 Closer의 참고 사항을 살펴보십시오.
A Closeable that collects Closeable resources and closes them all when it is closed. This is intended to approximately emulate the behavior of Java 7's try-with-resources statement in JDK6-compatible code. Running on Java 7, code using this should be approximately equivalent in behavior to the same code written with try-with-resources. Running on Java 6, exceptions that cannot be thrown must be logged rather than being added to the thrown exception as a suppressed exception.

This class is intended to be used in the following pattern:
   Closer closer = Closer.create();
   try {
     InputStream in = closer.register(openInputStream());
     OutputStream out = closer.register(openOutputStream());
     // do stuff
   } catch (Throwable e) {
     // ensure that any checked exception types other than IOException that could be thrown are
     // provided here, e.g. throw closer.rethrow(e, CheckedException.class);
     throw closer.rethrow(e);
   } finally {
     closer.close();
   }}

말하자면, 폐쇄할 수 있는 자원을 수집한 후에 이 자원을 통일적으로 폐쇄하는 도구류이다.계속...

좋은 웹페이지 즐겨찾기