java.io.*의 디자인 모델 및 요약

지식 포인트 1:4 대 등급 구조
자바 언어의 i/o 라 이브 러 리 는 4 가지 등급 구 조 를 제공 합 니 다:InputStream,OutputStream,Reader,Writer 네 가지 계열 의 종 류 를 제공 합 니 다.InputStream 과 OutputStream 은 8 비트 바이트 스 트림 데 이 터 를 처리 하고 Reader 와 Writer 는 16 비트 의 문자 스 트림 데 이 터 를 처리 합 니 다.InputStream 과 Reader 는 입력 을 처리 하고,OutputStream 과 Writer 는 출력 을 처리 합 니 다.여러분 은 반드시 J2SE 문서 에 가서 이 4 대 등급 구조의 계승 체 계 를 보 셔 야 합 니 다.
이 네 가지 시리즈 류 를 제외 하고 i/o 라 이브 러 리 는 소수의 보조 류 를 제공 하 는데 그 중에서 비교적 중요 한 것 은 InputStreamReader 와 OutputStreamWriter 이다.InputStreamReader 는 InputStream 을 Reader 로,OutputStreamWriter 는 OutputStream 을 Writer 로,이렇게 해서 바이트 흐름 처리 류 와 문자 흐름 처리 류 간 의 다 리 를 놓 았 다.
i/o 라 이브 러 리 를 사용 할 때 이상 의 규칙 에 따라 해당 하 는 클래스 시스템 에서 필요 한 클래스 를 찾 으 면 됩 니 다.
지식 포인트 2:적합 기능
자바 i/o 라 이브 러 리 의 계승 은 일반적인 계승 이 아 닙 니 다.그것 의 계승 모델 은 두 가지 로 나 뉘 는데 하 나 는 Adapter 모델 이다.다음은 InputStream 류 체 계 를 예 로 들 어 설명 한다.
InputStream 은 7 개의 직접 하위 클래스 가 있 습 니 다.ByteArray InputStream,FileInputStream,PipedInputStream,StringBufferInputStream,FilterInputStream,Object InputStream 과 Sequence InputStream 입 니 다.앞의 네 개 는 Adapter 모드 를 사 용 했 습 니 다.예 를 들 어 FileInputStream 부분 코드 는 다음 과 같 습 니 다.

Public class FileInputStream extends InputStream
  {
  /* File Descriptor - handle to the open file */
  private FileDescriptor fd;
  public FileInputStream(FileDescriptor fdObj)
  {
   SecurityManager security = System.getSecurityManager();
  if (fdObj == null) {
  throw new NullPointerException();
  }
  if (security != null) {
  security.checkRead(fdObj);
  }
  fd = fdObj;
  }
  //    
  }

 
이 를 통 해 알 수 있 듯 이 FileInputStream 은 InputStream 을 계승 하고 FileDescriptor 를 조합 하 며 대상 Adapter 모드 를 사용 합 니 다.우리 가 i/o 라 이브 러 리 를 배 울 때 주로 이 네 개의 대상 Adapter 모드 의 어댑터 를 파악 해 야 합 니 다.ByteArray InputStream 의 어댑터 는 Byte 배열 이 고,FileInputStream 의 어댑터 는 File 대상 이 며,PipedInputStream 의 어댑터 는 PipedOutputStream 대상 이 고,StringBufferInputStream 의 어댑터 는 String 대상 입 니 다.다른 세 가지 계열 의 학습 방법 은 이와 같다.
지식 포인트 3:Decorator 기능
InputStream 의 다른 세 가지 직접 하위 클래스 는 Decorator 모드 를 사용 합 니 다.<자바 와 모드>에서 비교적 분명하게 묘 사 했 습 니 다.사실 우 리 는 그것 이 어떤 모드 를 사용 하 든 상관 하지 않 고 코드 를 보면 알 수 있 습 니 다.FilterInputStream 부분 코드 는 다음 과 같 습 니 다.

Public class FilterInputStream extends InputStream {
  /**
  * The input stream to be filtered.
 */
  protected InputStream in;
  protected FilterInputStream(InputStream in) {
  this.in = in;
  }
  //    
  }

  
똑똑히 보 았 느 냐?FilterInputStream 은 InputStream 을 계승 하고 InputStream 도 인 용 했 으 며 네 개의 하위 클래스 가 있 는데 이것 이 바로 Decorator 모드 입 니 다.우 리 는 잠시 왜 Decorator 모드 를 사용 하 든 간 에,우 리 는 지금 알 아야 한다.InputStream 에는 다른 몇 개의 하위 클래스 가 있 기 때문에,우 리 는 다른 하위 클래스 를 매개 변수 로 FilterInputStream 대상 을 구성 할 수 있다.이것 은 우리 가 개발 할 때 자주 사용 하 는 기능 입 니 다.코드 예 시 는 다음 과 같 습 니 다.

{
  //         
  SecretKey key=null;
  ObjectInputStream keyFile=new ObjectInputStream(
  new FileInputStream("c:\\    \\    \\yhb.des"));
  key=(SecretKey)keyFile.readObject();
  keyFile.close();
  }
  
위의 코드 에서 Object InputStream 도 InputStream 의 하위 클래스 이 고 Decorator 기능 도 사 용 했 습 니 다.하지만 모 르 더 라 도 Decorator 모델 을 알 고 싶 지 않 습 니 다.본 고 에서 제시 한 FilterInputStream 의 두 단락 코드 만 기억 하면 됩 니 다.
상기 세 가 지 를 파악 하여 자바 i/o 라 이브 러 리 를 잘 응용 할 수 있 을 것 이 라 고 믿 습 니 다.

좋은 웹페이지 즐겨찾기