자바 7 의 전통 I / O - 문자 클래스 CharArray Reader 와 CharArray Writer

다음으로 전송:http://www.it165.net/pro/html/201402/9354.html
CharArray Reader 와 CharArray Writer 는 문자 배열 흐름 입 니 다.이것 은 ByteArray InputStream, ByteArray OutputStream 과 유사 합 니 다. ByteArray XXputStream 은 바이트 배열 흐름 이 고 CharArray XX 는 문자 배열 흐름 입 니 다.
CharArray Writer 는 문자 배열 을 읽 는 데 사 용 됩 니 다. Writer 클래스 에 계승 합 니 다.문자 단위 로 배열 작업 을 진행 합 니 다.다음은 주요 방법 으로 이 루어 진 소스 코드 를 살 펴 보 겠 습 니 다.
1. 생 성 및 초기 화
CharArray Writerer 에서 정의 하 는 중요 한 변수 와 구조 함 수 를 보십시오.
view source print ? 01. protected char buf[];  // , 02. protected int count;   // 03. public CharArrayWriter() { 04.      this ( 32 ); 05. } 06. public CharArrayWriter( int initialSize) { 07.      if (initialSize < 0 ) { 08.          throw new IllegalArgumentException( "Negative initial size: " + initialSize); 09.      } 10.      buf = new char [initialSize]; 11. }
기본 buf 배열 의 크기 는 32 이 며, 스스로 지정 할 수 있 습 니 다.
CharArray Reader 에서 정의 하 는 중요 한 변수 와 구조 함수:
view source print ? 01. protected char buf[];         // , 02. protected int pos;            // 03. protected int markedPos = 0 // 04.
  05. protected int count;          // 06.
  07. public CharArrayReader( char buf[]) { 08.      this .buf = buf; 09.      this .pos = 0 ; 10.      this .count = buf.length; 11. } 12.
  13. public CharArrayReader( char buf[], int offset, int length) { 14.      if ((offset < 0 ) || (offset > buf.length) || (length < 0 ) || ((offset + length) < 0 )) { 15.          throw new IllegalArgumentException(); 16.      } 17.      this .buf = buf; 18.      this .pos = offset; 19.      this .count = Math.min(offset + length, buf.length); 20.      this .markedPos = offset; 21. }
2, CharArray Writerer 기록 데이터
view source print ? 01. public void write( int c) { 02.      synchronized (lock) { 03.          int newcount = count + 1 ; 04.          if (newcount > buf.length) { 05.              buf = Arrays.copyOf(buf, Math.max(buf.length << 1 , newcount)); 06.          } 07.          buf[count] = ( char )c; 08.          count = newcount; 09.      } 10. } 11.
  12. public void write( char c[], int off, int len) { 13.      if ((off < 0 ) || (off > c.length) || (len < 0 ) || ((off + len) > c.length) || ((off + len) < 0 )) { 14.          throw new IndexOutOfBoundsException(); 15.      } else if (len == 0 ) { 16.          return ; 17.      } 18.      synchronized (lock) { 19.          int newcount = count + len; 20.          if (newcount > buf.length) { 21.              buf = Arrays.copyOf(buf, Math.max(buf.length << 1 , newcount)); 22.          } 23.          System.arraycopy(c, off, buf, count, len); 24.          count = newcount; 25.      } 26. } 27.
  28. public void write(String str, int off, int len) { 29.      synchronized (lock) { 30.          int newcount = count + len; 31.          if (newcount > buf.length) { 32.              buf = Arrays.copyOf(buf, Math.max(buf.length << 1 , newcount)); 33.          } 34.          str.getChars(off, off + len, buf, count); 35.          count = newcount; 36.      } 37. }
Write 클래스 에서 정의 하 는 write () 방법 과 append () 방법 을 실현 하 였 습 니 다.사실 현대 코드 는 비교적 간단 하 다. 앞에서 비슷 한 방법 은 이미 여러 번 말 했 으 니 여 기 는 더 이상 군말 하지 않 는 다.
3, CharArrayReader 읽 기 데이터
CharArray Reader 는 문자 배열 을 읽 는 데 사 용 됩 니 다. Reader 에 계승 합 니 다.조작 한 데 이 터 는 문자 단위 이다.다음은 주요 방법 으로 이 루어 진 소스 코드 를 살 펴 보 겠 습 니 다.
view source print ? 01. public int read() throws IOException { 02.      synchronized (lock) { 03.          ensureOpen(); 04.          if (pos >= count) 05.              return - 1 ; 06.          else 07.              return buf[pos++]; 08.      } 09. } 10.
  11. public int read( char b[], int off, int len) throws IOException { 12.      synchronized (lock) { 13.          ensureOpen(); 14.          if ((off < 0 ) || (off > b.length) || (len < 0 ) || 15.              ((off + len) > b.length) || ((off + len) < 0 )) { 16.              throw new IndexOutOfBoundsException(); 17.          } else if (len == 0 ) { 18.              return 0 ; 19.          } 20.
  21.          if (pos >= count) { 22.              return - 1 ; 23.          } 24.          if (pos + len > count) { 25.              len = count - pos; 26.          } 27.          if (len <= 0 ) { 28.              return 0 ; 29.          } 30.          System.arraycopy(buf, pos, b, off, len); 31.          pos += len; 32.          return len; 33.      } 34. }
문자열 을 조작 하 는 클래스 StringReader, StringWriter 와 유사 합 니 다. 사실 문자 배열 은 문자열 작업 과 일치 합 니 다. 문자열 은 밑 에 있 는 것 이 실제 적 으로 문자 배열 로 이 루어 집 니 다.StringReader 와 StringWriter 류 를 이해 하면 쉽게 이해 할 수 있 습 니 다.그리고 이 두 가지 유형 도 스 레 드 가 안전 하 다 는 것 을 알려 드 립 니 다.
간단 한 테스트 프로그램 을 만 듭 니 다:
view source print ? 1. char [] x={ 'a' , 'd' , 'p' }; 2. CharArrayWriter cw= new CharArrayWriter(); 3. cw.write(x, 0 , 2 ); 4. cw.append( "x" ); 5. System.out.println(cw.toString()); // adx 6.
  7. CharArrayReader cr= new CharArrayReader(cw.toCharArray()); 8. System.out.println(( char )cr.read()); // a


좋은 웹페이지 즐겨찾기