자바 1.0 과 자바 1.1 의 IO 류 비교

4850 단어 JavaIO
자바 1.0 IO 시스템 은 자바 IO 버 전 자바 라 이브 러 리 의 IO 를 입 출력 두 부분 으로 나 누 었 다.초기 자바 1.0 버 전의 입력 시스템 은 InputStream 과 그 하위 클래스 이 고 출력 시스템 은 OutputStream 과 그 하위 클래스 입 니 다.이후 자바 1.1 버 전 은 IO 시스템 을 재 설계 했다.입력 시스템 은 Reader 와 그 하위 클래스 이 고 출력 시스템 은 Writer 와 그 하위 클래스 입 니 다.자바 1.1 을 재 설계 하려 는 이 유 는 국제 화 지원(즉,16 비트 유 니 코드 에 대한 지원 추가)을 추가 하기 위해 서 입 니 다.자바 1.0 으로 구체 적 으로 나타 난 IO 시스템 은 바이트 흐름 이 고 자바 1.1 의 IO 시스템 은 문자 흐름 이다.바이트 흐름 은 데이터 흐름 에서 가장 작은 데이터 단원 이 8 자리 바이트 인 것 이다.문자 흐름 은 데이터 흐름 에서 가장 작은 데이터 단위 가 16 자리 문자 입 니 다.바이트 가 동작 할 때 버퍼 를 사용 하지 않 습 니 다.문자 흐름 은 버퍼 를 사용 합 니 다.그래서 문자 흐름 의 효율 이 더 높 습 니 다.왜 버퍼 를 사용 하면 효율 이 더 높 을까요?그것 은 버퍼 가 본질 적 으로 메모리 영역 이기 때문이다.파일 은 대부분 하 드 디스크 나 Nand Flash 에 저 장 됩 니 다.읽 기와 쓰기 메모리 의 속 도 는 하 드 디스크 나 Nand Flash 의 파일 을 읽 는 것 보다 훨씬 빠 릅 니 다!현재 파일 은 대부분 바이트 로 저장 되 어 있다.그래서 개발 에서 바이트 흐름 은 비교적 광범 위 하 게 사용 된다. 2 자바 1.0 과 자바 1.1 의 IO 류 비교 표 01자바 1.0 과 자바 1.1 의 IO 기본 클래스 대비 표  표 02자바 1.0 과 자바 1.1 의 IO 장식 기 비교 표 자바 IO 시스템 을 기본 클래스 와 인 테 리 어 로 구분 하 는 이 유 는 기본 클래스 는 주로 파일,문자열 등 다양한 종류 로 나 뉘 는데 인 테 리 어 는'Decorator 모드'('4 Decorator 모드 참조)를 구현 하기 위 한 것 이기 때문이다.3 자바 1.0 IO 시스템 은 자바 1.0 과 자바 1.1 의 IO 시스템 의 원리 와 사용 방법 이 모두 비슷 하기 때 문 이 라 고 소개 한다.따라서 자바 1.0 의 IO 시스템 에 대해 설명 한다.3.1 입력 흐름 InputStream 은 바이트 입력 흐름 의 모든 종류의 초 클래스 로 주로 다음 과 같은 몇 가지 자주 사용 하 는 하위 클래스 를 포함한다.(01)ByteArray InputStream 은 바이트 배열 을 바이트 배열 의 입력 흐름 으로 사용 합 니 다.(02)StringBufferInputStream 은 문자열 입력 흐름 으로 문자열 을 사용 합 니 다.시간 이 지 났 습 니 다.사용 을 권장 하지 않 습 니 다.(03)FileInputStream 은 파일 이나 FileDescriptor 를 파일 입력 흐름 으로 사용 합 니 다.이 입력 흐름 을 만 들 때 전달 하 는 매개 변 수 는'파일 이름'(String 형식),'File 대상'또는'FileDescriptor 대상'(즉 표준 입력 흐름,출력 흐름,오류 흐름 의 핸들 일 수 있 음)일 수 있 습 니 다.(04)PipedInputString 은 파이프 출력 흐름 을 기록 할 모든 데이터 바 이 트 를 제공 합 니 다.이 입력 흐름 을 만 들 때 해당 하 는 파이프 출력 순환 을 지정 할 수 있 습 니 다.이렇게 하면 해당 하 는 파이프 의 입력 흐름 을 파이프 출력 흐름 에 연결 하 는 것 을 의미한다.(05)FilterInputStream 은 InputStream 과 직접 계승 되 며 주로 Decorator 모드 를 실현 하 는 데 사 용 됩 니 다(이것 은 뒤에서 설명 합 니 다).FilterInputStream 은 주로 두 개의 파생 클래스 인'DataInputStream'과'BufferedInputStream'이 있다.DataInputStream 은 byte,char,int 등 기본 형식 과 String 을 읽 는 다양한 인 터 페 이 스 를 제공 합 니 다.Buffered InputStream 은 버퍼 기능 을 제공 합 니 다.3.2 출력 흐름 OutputStream 은 바이트 출력 흐름 의 모든 종류의 초 클래스 로 주로 다음 과 같은 몇 가지 자주 사용 하 는 하위 클래스 를 포함한다.(01)ByteArray OutputStream 바이트 배열 의 출력 흐름,그 중의 데 이 터 는 byte 배열 에 기록 되 었 습 니 다.버퍼 는 데이터 가 계속 기록 되면 서 자동 으로 증가 합 니 다.toByteArray()와 toString()을 사용 하여 데 이 터 를 가 져 올 수 있 습 니 다.(02)FileOutputStream 파일 출력 흐름 은 데 이 터 를 File 또는 FileDescriptor 에 기록 하 는 출력 흐름 입 니 다.  파일 이 사용 가능 하거나 생 성 될 수 있 는 지 여 부 는 기본 플랫폼 에 달 려 있 습 니 다.특히 일부 플랫폼 에 서 는 한 번 에 하나의 FileOutputStream(또는 다른 파일 쓰기 대상)만 파일 을 열 어 기록 할 수 있 습 니 다.이 경우 관련 파일 이 열 렸 다 면 이러한 구조 방법 은 실 패 했 습 니 다.(03)Piped OutputString 은 파이프 출력 흐름 을 파이프 입력 흐름 에 연결 하여 통신 파 이 프 를 만 들 수 있 습 니 다.파이프 출력 흐름 은 파이프 의 송신 단 이다.일반적으로 데 이 터 는 한 스 레 드 에서 Piped OutputStream 대상 을 기록 하고 연 결 된 Piped InputStream 에서 읽 습 니 다.  이 두 대상 에 게 하나의 스 레 드 를 사용 하 는 것 을 권장 하지 않 습 니 다.왜냐하면 이 스 레 드 가 잠 길 수 있 기 때 문 입 니 다.연 결 된 파이프 입력 흐름 에서 데이터 바 이 트 를 읽 고 있 지만 이 스 레 드 가 더 이상 활동 상태 가 아니라면 이 파 이 프 는 파 괴 된 상태 로 간 주 됩 니 다.(04)FilterOutputStream 은 OutputStream 과 직접 계승 하여 Decorator 모드 를 실현 하 는 데 사 용 됩 니 다(이것 은 뒤에서 설명 합 니 다).FilterOutputStream 은 주로 두 개의 파생 클래스 인'DataOutputStream'과'BufferedOutputStream'이 있다.DataOutput Stream 은 byte,char,int 등 기본 형식 과 String 을 기록 하 는 다양한 인 터 페 이 스 를 제공 합 니 다.Buffered Output Stream 은 버퍼 기능 을 제공 합 니 다. 4 Decorator 모드 Decorator,장식 모드,Wrapper 라 고도 부른다.그것 의 주요 기능 은 동적 으로 하나의 기능 을 확장 하 는 데 있다.자바 IO 시스템 은'파일 흐름','문자 직렬 흐름','바이트 흐름','버퍼 흐름'등 을 포함한다.입력 흐름 과 버퍼 흐름 같은 다양한 데이터 흐름 기능 이 필요 하 다 면.상속 방식 을 채택 하면 수량 이 너무 많다.이 문 제 를 해결 하기 위해 Decorator 모델 은 동적 확장 을 실현 했다.즉,실행 할 때 동적 으로'장식'과 같은 기능 을 제공 하 는 것 이다.예 를 들 어:InputStream input=newBufferedInputStream(new FileInputStream("test.txt"));이것 은 바로 FileInputStream 을 BufferedInputStream 으로 장식 하여 버퍼 기능 을 가지 게 하 는 것 이다.5 JAVA IO 예

package com.skywang;

import java.io.*;
public class IOTest{
    publicstaticvoidmain(String[] args) throwsIOException {
       try {
            File f=newFile("d:123.txt");
            OutputStream out =
                  new BufferedOutputStream(
                      new FileOutputStream(f));
            String str="helloskywang!";

            byte[]b=str.getBytes();
            for(int i = 0; i < b.length; i++) {
                out.write(b[i]);
            }
            out.close();
       }catch (FileNotFoundException e){
           e.printStackTrace();
       }catch (SecurityException e){
           e.printStackTrace();
       }
    }
}

좋은 웹페이지 즐겨찾기