JAVA Output Stream Writer 흐름 의 실현

1.OutputStreamWriter 흐름
    API 설명:OutputStreamWriter 는 문자 에서 바이트 로 흐 르 는 브리지 입 니 다.지정 한 문자 집합 을 사용 하여 기록 한 문 자 를 바이트 로 인 코딩 합 니 다.사용 하 는 문자 집합 은 이름 으로 지정 할 수도 있 고 명확 하 게 지정 할 수도 있 으 며 플랫폼 의 기본 문자 집합 을 받 아들 일 수도 있 습 니 다.
write()방법 을 호출 할 때마다 주어진 문자 에 인 코딩 변환 기 를 호출 합 니 다.생 성 된 바 이 트 는 바 텀 출력 흐름 을 기록 하기 전에 버퍼 에 누적 되 어 있 습 니 다.이 버퍼 의 크기 를 지정 할 수 있 지만,기본 값 으로 는 충분 하 며,대부분의 용도 로 사용 할 수 있 습 니 다.write()방법 에 전 달 된 문 자 는 버퍼 링 되 지 않 습 니 다.
최고 효율 을 얻 기 위해 서 는 잦 은 변환기 호출 을 피하 기 위해 Buffered Writer 에 Output Stream Writer 를 포장 하 는 것 을 고려 하 십시오.
1)OutputStreamWriter 는 문자 에서 바이트 로 흐 르 는 브리지 인 데 어떻게 이해 합 니까?
     1.문자 의 출력 은 문자 흐름 을 통 해 조작 해 야 하지만 본질 은 마지막 으로 바이트 흐름 을 통 해 컴퓨터 에 저장 합 니 다.
     2.그러므로 OutputStreamWriter 흐름 의 역할 은 바로 바이트 흐름 을 바 텀 출력 흐름 으로 한 다음 에 문자 출력 흐름 을 구축 하 는 것 입 니 다.문자 출력 흐름 은 문 자 를 흐름 에 출력 한 다음 에 지정 한 문자 집합 을 통 해 흐름 중의 문 자 를 바이트 로 인 코딩 하여 바이트 흐름 에 출력 하 는 것 입 니 다.그 역할 은 바로 하나의 교량 으로 쌍방 을 연결 시 키 는 것 입 니 다.
2)사용 하 는 문자 집합 은 이름 으로 지정 할 수도 있 고 명확 하 게 지정 할 수도 있 으 며 플랫폼 의 기본 문자 집합 을 받 아들 일 수도 있 습 니 다.어떻게 이해 합 니까?
    Output StreamWriter 흐름 의 구조 방법 은 문자 집합 을 지정 하거나 기본 값 을 설정 하지 않 습 니 다.
3)write()방법 을 호출 할 때마다 주어진 문자 에 인 코딩 변환 기 를 호출 합 니 다.생 성 된 바이트 가 바 텀 출력 흐름 을 기록 하기 전에 버퍼 에 누적 되 어 어떻게 이해 합 니까?
     출력 스 트림 Writer 에는 출력 할 때마다 문자 인 코딩 된 바 이 트 를 저장 하 는 데 사용 되 는 바이트 버퍼 가 존재 합 니 다.그리고 문자 출력 이 끝나 면 저 장 된 바 이 트 를 한꺼번에 바 텀 바이트 출력 흐름 에 출력 합 니 다.
4)write()방법 에 전 달 된 문 자 는 버퍼 링 되 지 않 습 니 다.어떻게 이해 합 니까?
      잘 이해 되 지 않 습 니 다.write()방법 은 문 자 를 전달 하 는 방법 으로 실제 참조 하기 때 문 입 니 다.이 문자 가 버퍼 링 되 지 않 으 면 버퍼 의 바이트 가 어디에서 오 는 지~~~~~
5)잦 은 변환기 호출 을 피하 기 위해 Buffered Writer 에 Output Stream Writer 를 포장 하 는 것 을 고려 합 니까?
     1.OutputStreamWriter 대상 을 통 해 BufferedWriter 대상 을 구축 하여 문자 출력의 효율 을 높 일 수 있 습 니 다.
     2.OutputStreamWriter 에서 문자 인 코딩 기 를 자주 호출 하여 전환 하 는데 이런 전환 과정 은 자원 을 많이 소모 합 니까?

public class OutputStreamWriter extends Writer{}
2.Output StreamWriter 흐름 구조 함수
 1)출력 흐름 을 이용 하여 기본 문자 인 코딩 을 구축 하 는 OutputStreamWriter 흐름:본질은 StreamEncoder 대상 초기 화

      private final StreamEncoder se;
 
      public OutputStreamWriter(OutputStream out) {
        super(out);
        try {
            se = StreamEncoder.forOutputStreamWriter(out, this, (String)null);
        } catch (UnsupportedEncodingException e) {
            throw new Error(e);
        }
    }
2)지 정 된 문자 인 코딩 을 통 해 OutputStreamWriter 흐름 구축:본질은 StreamEncoder 대상 을 초기 화 하 는 것 이지 만 문자 인 코딩 을 지 정 했 습 니 다

    public OutputStreamWriter(OutputStream out, String charsetName)
        throws UnsupportedEncodingException
    {
        super(out);
        if (charsetName == null)
            throw new NullPointerException("charsetName");
        se = StreamEncoder.forOutputStreamWriter(out, this, charsetName);
    }
3)FileWriter 류 구 조 는 OutputStreamWriter 류 구조 방법 을 호출 하고,OutputStreamWriter 류 구조 방법 은 본질 적 으로 StreamEncoder 대상 을 초기 화 하 는 것 이 므 로 최종 실현 은 StreamEncoder 소스 코드 를 찾 아 봐 야 한다.
3.Output StreamWriter 흐름 API
1)스 트림 에 문 자 를 기록 합 니 다:본질은 StreamEncoder 를 호출 하 는 write(int c)방법 입 니 다.

    public void write(int c) throws IOException {
        se.write(c);
    }
2)문자 배열 의 일부분 을 흐름 에 기록 합 니 다:본질 적 으로 StreamEncoder 의 write(char cbuf[],int off,int len)방법 을 호출 합 니 다.

    public void write(char cbuf[], int off, int len) throws IOException {
        se.write(cbuf, off, len);
    }
3)문자열 의 일 부 를 스 트림 에 기록 합 니 다:본질은 StreamEncoder 의 write(String str,int off,int len)방법 을 호출 하 는 것 입 니 다.

    public void write(String str, int off, int len) throws IOException {
        se.write(str, off, len);
    }
4)새로 고침 흐름 의 데이터:본질은 StreamEncoder 를 호출 하 는 flush()방법 입 니 다.

  public void flush() throws IOException {
        se.flush();
    }
5)흐름 을 닫 지만 흐름 을 새로 고침 합 니 다.즉,이 흐름 은 flush 방법 을 먼저 호출 한 다음 에 close 방법 을 사용 해 야 합 니 다.

    public void close() throws IOException {
        se.close();
    }
6)OutputStreamWriter 흐름 의 API 와 구조 방법 은 본질 적 으로 모두 StreamEncoder 흐름 을 호출 하 는 방법 이기 때문에 OutputStreamWriter 흐름 의 구체 적 인 실현 은 StreamEncoder 흐름 소스 코드 를 봐 야 알 수 있다.
JAVA OutputStreamWriter 흐름 의 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 JAVA OutputStreamWriter 흐름 에 관 한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기