Akashic Records

자바 nio - 7 본문

오래된글/Java

자바 nio - 7

Andrew's Akashic Records 2018. 4. 9. 11:27
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
Comments