본문 바로가기
오래된글/Java

자바 nio - 7

by Andrew's Akashic Records 2018. 4. 9.
728x90

7. CharBuffer 클래스

CharBuffer는 char 데이터 유형을 대상하는 버퍼로 특징은 1.4부터 추가된 java.lang.CharSequence 인터페이스를 구현하고 있다는 점이다. 다음은 CharBuffer의 클래스 선언문이다.

public abstract class CharBuffer extends Buffer implements Comparable , CharSequence


CharSequence 인터페이스를 구현하기 때문에, 문자 순서를 받아들일 수 있는 장소이면 어디에서라도, char 버퍼를 사용할 수 있다. 예를 들어, 1.4부터 추가된 정규 표현의 패키지 java.util.regex 에서의 사용이 가능하다. 또한 wrap()메서드에서 char[] 배열 대신에 CharSequence 객체가 들어 올 수 있어서 String이나 StringBuffer를 wrap()해서 CharBuffer로 만들 수 있다.

CharSequence 인터페이스

JDK 1.4부터 추가된 인터페이스로서 CharSequence 는 읽어들일 수 있는 문자 순서를 나타낸다. 이 인터페이스는, 다양한 종류의 문자 순서에의 통일된 read 전용 액세스를 제공한다.

<< 메서드 >>

- char charAt (int index) : 지정된 인덱스 위치에 있는 문자를 리턴

- int length () : 이 문자 순서의 길이를 리턴.

- CharSequence subSequence (int start, int end) : 이 순서의 서브 순서인 신규 문자 순서를 리턴.

- String toString () : 이 순서와 같은 순서로 문자를 포함한 스트링을 리턴.

구현 클래스 : CharBuffer , String , StringBuffer


모든 버퍼류 클래스의 객체들은 toString()메서드 호출시 자신의 여러 설정들을 보여준다. 가령 예를 들어 다음과 같이 코드를 작성해서 실행을 했다고 하자.

IntBuffer buf=IntBuffer.allocate(10);

System.out.println("생성된 후:"+buf);//자동 toString() 호출....당연,,,

==>실행 결과

생성된 후 : java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]

하지만 CharBuffer는 자신이 가지고 있는 char들을 보여준다. 따라서 CharBuffer의 여러 값들을 보고자 할때에는 메서드를 사용해야 한다.CharBuffer에는 위같은 사실만 알고 있으면 사용하는데는 별 무리가 없다.

1. 예제

package nio;

import java.nio.*;

public class CharBufferTest {

public static void main(String[] args) {

CharBufferTest test = new CharBufferTest();

test.exec();

}

public void exec() {

String s = "String 문자열";

CharBuffer buf = CharBuffer.wrap(s);

System.out.println(" pos:" + buf.position() +

" limit:" + buf.limit() +

" cap:" + buf.capacity());

buf.clear();

while (buf.hasRemaining()) {

System.out.print(buf.get());

}

System.out.println("\n" + "-------------------------");

StringBuffer s2 = new StringBuffer("StringBuffer 문자열");

CharBuffer buf2 = CharBuffer.wrap(s2);

System.out.println(" pos:" + buf2.position() +

" limit:" + buf2.limit() +

" cap:" + buf2.capacity());

buf2.clear();

while (buf2.hasRemaining()) {

System.out.print(buf2.get());

}

}

}


<< 실행 결과 >>


C\>java CharBufferTest

pos:0 limit:10 cap:10

String 문자열

-------------------------

pos:0 limit:16 cap:16

StringBuffer 문자열


소스를 보면 두 개의 CharBuffer를 생성해서 하나는 String 을 데이터로, StringBuffer를 데이터로 삽입한다. 이것이 가능한 이유는 앞서 말했지만 CharSequence 인터페이스를 구현하기 때문이다. 그리고 CharBuffer의 객체를 출력시 값을 알기위해서 다음과 같이 출력함을 볼 수 있다.

System.out.println("pos:"+buf.position()+" limit:"+buf.limit()+" cap:"+buf.capacity());



728x90

'오래된글 > Java' 카테고리의 다른 글

자바 nio - 9  (0) 2018.04.09
자바 nio - 8  (0) 2018.04.09
자바 nio - 6  (0) 2018.04.09
자바 nio - 5  (0) 2018.04.09
자바 nio - 4  (0) 2018.04.09