자바 I/O 딥 러 닝 의 입 출력

6720 단어 자바I/O입력출력
머리말
프로 그래 밍 언어의 I/O 라 이브 러 리 에 서 는 스 트림 이라는 추상 적 인 개념 을 자주 사용 하 는데 이 는 데 이 터 를 생산 할 수 있 는 데이터 소스 대상 이나 데 이 터 를 받 을 수 있 는 수신 단 대상 을 대표 한다.'스 트림 은 실제 I/O 장치 에서 데 이 터 를 처리 하 는 디 테 일 을 차단 합 니 다.
글:<Java I/O 딥 러 닝 의 File 과 RandomAccessFile>에서 우 리 는 RandomAccessFile 은 파일 을 기록 하고 읽 을 수 있 으 며 I/O 기능 을 갖 추고 있 지만 파일 만 을 대상 으로 할 수 있 고 I/O 는 네트워크,메모리 에 있 는 문자열 읽 기 등 여러 장면 과 관련 되 기 때문에 자바 라 이브 러 리 에서 일련의 라 이브 러 리 를 제공 하여 이 를 지원 한다.즉,본 고 는 총 결 학습 해 야 한다.
자바 라 이브 러 리 의 I/O 클래스 는 입 출력 두 부분 으로 나 뉘 어 있 으 며,JDK 문서 의 클래스 계층 구조 에서 볼 수 있 습 니 다.계승 을 통 해 모든 Inputstream 이나 Reader 에서 파생 된 클래스 는 read()라 는 기본 적 인 방법 을 포함 하여 하나의 바이트 나 바이트 배열 을 읽 는 데 사 용 됩 니 다.마찬가지 로 OutputStream 이나 Writer 에서 파생 된 모든 종 류 는 write()라 는 기본 적 인 방법 을 포함 하여 하나의 바이트 나 바이트 배열 을 쓰 는 데 사용 된다.
그러나 우 리 는 일반적으로 이런 방법 을 사용 하지 않 는 다.그들 이 존재 하 는 이 유 는 다른 종류 가 그들 을 사용 하여 더욱 유용 한 인 터 페 이 스 를 제공 할 수 있 기 때문이다.따라서 우 리 는 단일 한 종 류 를 사용 하여 흐름 대상 을 만 드 는 것 이 아니 라 여러 대상 을 겹 쳐 서 기대 하 는 기능 을 제공 합 니 다(이것 은 장식 기 디자인 모델 의 응용 이 고 전문 적 으로 글 을 써 서 정리 한 적 이 있 습 니 다:장식 기 모델).실제로 자바 의'흐름'라 이브 러 리 가 사람 을 현혹 시 키 는 주요 원인 은 단일 한 결과 흐름 을 만 들 지만 여러 개의 대상 을 만들어 야 하기 때문이다.
I/O 가 대응 해 야 할 장면 은 다양 하 다.자바 라 이브 러 리 의 디자이너 는 대량의 유형 을 만들어 이 어 려 운 문 제 를 해결 하 는 것 이다.한 편의 글 은 상세 하 게 설명 하기 어렵다.본 고 는 전통 적 인 I/O 라 이브 러 리 와 관련 된 유형 에 대해 총람 을 제공 하고 전체 맥락 을 파악 하 는 전제 에서 I/O 라 이브 러 리 를 잘 이해 하고 응용 하여 실제 프로 그래 밍 문 제 를 해결 할 수 있다.자세 한 내용 이 필요 하 시 면 JDK 문 서 를 참고 하 셔 야 합 니 다.
1. InputStream/OutputStream
자바 1.0 에서 라 이브 러 리 의 디자이너 는 먼저 입력 과 관련 된 모든 종 류 를 InputStream 에서 계승 해 야 하고 출력 과 관련 된 모든 종 류 는 OutputStream 에서 계승 해 야 한다.
1.1 InputStream
InputStream 의 역할 은 서로 다른 데이터 소스 에서 입력 하 는 종 류 를 나타 내 는 것 이다.이 데이터 원본 은 다음 과 같 습 니 다.
  • 바이트 배열;
  • String 대상;
  • 파일;
  • '파이프'는 작업 방식 이 실제 파이프 와 비슷 하 다.즉,한 끝 에서 입력 하고 다른 한 끝 에서 출력 한다.
  • 다른 종류의 흐름 으로 구 성 된 서열 로 우리 가 그것들 을 하나의 흐름 에 모 을 수 있 도록 한다.
  • 인터넷 연결 등 다른 데이터 소스;
  • 모든 데이터 원본 에는 해당 하 는 InputStream 서브 클래스 가 있 고 기본 구성 요소 로 서:
  • ByteArray InputStream 은 메모리 의 버퍼 를 InputStream 으로 사용 할 수 있 습 니 다.
  • StringBufferInputStream,String 을 InputStream 으로 변환 합 니 다.
  • FileInputStream 은 파일 에서 정 보 를 읽 는 데 사 용 됩 니 다.
  • PipedInputStream 은 관련 PipedOutputStream 을 기록 하 는 데 사용 되 는 데 이 터 를 생 성 합 니 다.'파이프 화'개념 실현;
  • Sequence InputStream 은 두 개 이상 의 InputStream 대상 을 단일 InputStream 으로 변환 합 니 다.
  • 1.2 OutputStream
    OutputStream 의 역할 은 서로 다른 데이터 원본 에 출력 할 수 있 는 클래스 를 나타 내 는 것 입 니 다.구체 적 인 하위 클래스 는 출력 이 가 야 할 목 표를 결정 합 니 다.바이트 배열,파일 또는 파이프 역시 기본 구성 요소 입 니 다.
  • ByteArray OutputStream,메모리 에 버퍼 를 만 듭 니 다."흐름"으로 보 내 는 모든 데 이 터 는 이 버퍼 에 설치 해 야 합 니 다.
  • FileOutputStream 은 파일 에 정 보 를 쓰 는 데 사 용 됩 니 다.
  • Piped OutputStream 은 그 안에 기 록 된 모든 정 보 를 관련 Piped InputStream 의 출력 으로 자동 으로'파이프 화'개념 을 실현 합 니 다.
  • 1.3 장식 기
    위의 기본 구성 요 소 를 제외 하고 두 가지 키 종류 가 있 습 니 다.FilterInputStream/FilterOutputStream 은 InputStream 과 OutputStream 의 하위 클래스 입 니 다.이들 은'장식 기'(decorator)류 에 기본 클래스 를 제공 합 니 다.그 중에서'장식 기'류 는 속성 이나 유용 한 인 터 페 이 스 를 기본 구성 요소 와 연결 할 수 있 습 니 다.위 에서 언급 한 InputStream/OutputStream 은 단일 바이트 단위 로 작 동 되 는데 실제 I/O 장면 은 여기에 그 치지 않 기 때문에'장식'(그 원 리 는 클래스 간 의 조합)방식 으로 기능 을 확장 합 니 다.
    저 는 InputStream/OutputStream 흐름 계승 차원 구 조 를 정리 하고 아래 의 해석 을 결합 하면 바이트 흐름 체계 에 대해 더욱 뚜렷 한 인식 을 가 질 수 있 습 니 다.

    1.3.1 FilterInputStream
    FilterInputStream 류 는 주로 다음 과 같은 종류 가 있 습 니 다.즉,구체 적 인 장식 기 입 니 다.
  • DataInputStream;
  • BufferedInputStream;
  • LineNumberInputStream;
  • 그 가 제공 하 는 장식 기능 은 주로 두 가지 측면 에 있다.
  • 서로 다른 기본 유형의 데이터 와 String 대상 을 읽 습 니 다.예 를 들 어 DataInputStream;
  • 내부 에서 InputStream 의 행동 방식 을 수정 합 니 다.버퍼 링 여부,읽 은 줄 유지 여부,예 를 들 어 BuffereInputStream,LineNumberInputStream 등;
  • 1.3.2 FilterOutputStream
    FilterInputStream 과 유사 합 니 다.FilterOutputStream 은 주로 기록 을 완성 하 는 기능 입 니 다.주로 다음 과 같은 장식 기 가 있 습 니 다.
  • DataOutputStream 은 DataInputStream 과 조합 하여 사용 하기 때문에 이식 가능 한 방식 으로 흐름 에 기본 형식 데이터(int,char,long)를 기록 할 수 있 습 니 다.
  • PrintStream 은 포맷 출력 을 만 드 는 데 사 용 됩 니 다.그 중에서 DataOutputStream 처리 데이터 의 저장,PrintStream 처리 디 스 플레이;
  • BufferedOutputStream 은 데 이 터 를 보 낼 때마다 실제 쓰기 동작 을 하지 않도록 사용 합 니 다.버퍼 사용flush()를 호출 하여 버퍼 를 비 울 수 있 습 니 다.
  • 2. Writer/Reader
    InputStream 과 OutputStream 은 바이트 형식의 I/O 를 제공 하지만,InputStream/OutputStream 흐름 계승 계층 구 조 는 8 비트 바이트 흐름 만 지원 하고 16 비트 유 니 코드 문 자 를 잘 처리 하지 못 합 니 다.유 니 코드 는 문자 국제 화(자바 자체 의 char 도 16 비트 유 니 코드)에 사용 되 기 때문에 Reader/Writer 계승 계층 구 조 를 추가 하 는 것 은 모든 I/O 작업 에서 유 니 코드 를 지원 하기 위 한 것 입 니 다.
    거의 모든 원시 적 인 자바 I/O 흐름 류 는 해당 하 는 Reader 와 Writer 류 를 가지 고 천연 적 인 유 니 코드 작업 을 제공 합 니 다.우 리 는 비교 해 볼 수 있 습 니 다.

    우 리 는 대체적으로 이 두 개의 서로 다른 계승 차원 구조 중의 인 터 페 이 스 는 완전히 같 지 않 더 라 도 매우 비슷 하 다 는 것 을 발견 했다.
    InputStream 과 OutputStream 의 경우 FilterInputStream 과 FilterOutputStream 의 장식 기 하위 클래스 를 사용 하여'흐름'을 수정 하여 특수 한 수 요 를 만족 시 킬 것 입 니 다.Reader/Writer 의 계승 차원 구 조 는 똑 같은 사상 을 계속 사용 하지만 위 에서 말 한 장식 기 모델 을 완전히 사용 하지 않 습 니 다.다음은 자신 이 정리 한 Reader/Writer 계승 차원 구조 입 니 다.

    앞의 I/O 계승 계층 구조 도와 비교 해 보면 BufferedOutputStream 은 FilterOutputStream 의 하위 클래스 임 에 도 불구 하고 BufferedWriter 는 FilterWriter 의 하위 클래스 가 아 닙 니 다(FilterWriter 는 추상 클래스 이지 만 하위 클래스 가 없 으 며 차지 문자 로 만 사 용 됩 니 다).
    2.1 어댑터
    때때로 우 리 는'바이트'차원 구조 에서 나 온 클래스 와'문자'차원 구조 에서 나 온 클래스 를 결합 해서 사용 해 야 한다.이 목적 을 실현 하기 위해 서 는'어댑터'(adapter)클래스 를 사용 해 야 합 니 다.InputStreamReader 는 InputStream 을 Reader 로 변환 할 수 있 고,OutputStreamWriter 는 OutputStream 을 Writer 로 변환 할 수 있 습 니 다.
    3.총화
  • I/O 가 대응 해 야 할 장면 은 다양 하 다.자바 라 이브 러 리 의 디자이너 는 대량의 클래스 를 만들어 서 이 어 려 운 문 제 를 해결한다.실제 사용 에서 장식 기 모델 을 통 해'클래스 폭발'을 피하 지만 클래스 의 수량 이 적지 않다.이것 도 자바 에서'흐름'라 이브 러 리 가 사람 을 현혹 시 키 는 주요 원인 이다.
  • InputStream 과 OutputStream 은 바이트 형식의 I/O 를 제공 하고 Reader 와 Writer 는 유 니 코드 와 문 자 를 호 환 하 는 IO 기능 을 제공 합 니 다.
  • 바이트 흐름 과 문자 흐름 을 결합 하여 사용 해 야 한다 면 어댑터 로 변환 할 수 있 습 니 다.InputStreamReader 는 InputStream 을 Reader 로 변환 할 수 있 고,OutputStreamWriter 는 OutputStream 을 Writer 로 변환 할 수 있 습 니 다.
  • 본 고 는 주로 전통 적 인 I/O 흐름 의 계승 차원 구 조 를 정리 했다.바이트 흐름(InputStream/OutputStream)과 문자 흐름(Writer/Reader)을 포함 하고 처음부터 I/O 라 이브 러 리 의 바다 에 머리 를 박 지 않 았 다.주로 이런 방식 으로 전체 I/O 체계 에 대해 명확 한 인식 을 가지 기 를 바란다.이것 은 진일보 한 학습 에 더욱 명확 한 지도 역할 을 할 수 있다.다음은 I/O 의 전형 적 인 사용 방식 에 대해 정리 할 것 이다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기