자바 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 의 역할 은 서로 다른 데이터 소스 에서 입력 하 는 종 류 를 나타 내 는 것 이다.이 데이터 원본 은 다음 과 같 습 니 다.
OutputStream 의 역할 은 서로 다른 데이터 원본 에 출력 할 수 있 는 클래스 를 나타 내 는 것 입 니 다.구체 적 인 하위 클래스 는 출력 이 가 야 할 목 표를 결정 합 니 다.바이트 배열,파일 또는 파이프 역시 기본 구성 요소 입 니 다.
위의 기본 구성 요 소 를 제외 하고 두 가지 키 종류 가 있 습 니 다.FilterInputStream/FilterOutputStream 은 InputStream 과 OutputStream 의 하위 클래스 입 니 다.이들 은'장식 기'(decorator)류 에 기본 클래스 를 제공 합 니 다.그 중에서'장식 기'류 는 속성 이나 유용 한 인 터 페 이 스 를 기본 구성 요소 와 연결 할 수 있 습 니 다.위 에서 언급 한 InputStream/OutputStream 은 단일 바이트 단위 로 작 동 되 는데 실제 I/O 장면 은 여기에 그 치지 않 기 때문에'장식'(그 원 리 는 클래스 간 의 조합)방식 으로 기능 을 확장 합 니 다.
저 는 InputStream/OutputStream 흐름 계승 차원 구 조 를 정리 하고 아래 의 해석 을 결합 하면 바이트 흐름 체계 에 대해 더욱 뚜렷 한 인식 을 가 질 수 있 습 니 다.
1.3.1 FilterInputStream
FilterInputStream 류 는 주로 다음 과 같은 종류 가 있 습 니 다.즉,구체 적 인 장식 기 입 니 다.
FilterInputStream 과 유사 합 니 다.FilterOutputStream 은 주로 기록 을 완성 하 는 기능 입 니 다.주로 다음 과 같은 장식 기 가 있 습 니 다.
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.총화
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.