JAVA이야기
동기화와 동시성, Filter Stream, Buffered Stream
НooпeУ
2011. 7. 29. 12:40
바이트 스트림, 문자스트림 모두 동기화 정책을 정의하고 있다.
java.nio 패키지에서 제공하는 인터럽트 가능한 채널은 스트림을 사용한 스레드가 인터럽트되었을 때 스트림을 닫는 인터럽션을 지원한다.
Filter 스트림
Filter스트림은 스트림들을 연결하여 더 유용한 복합 스트림을 만들어 낼 수 있다.
각각의 필터 스트림은 실제 입력과 출력 처리를 다른 스트림에 위임해야 한다.
Filter Stream은 데이터를 읽고 쓰고 변형하는 처리를 할 수 있다.
Buffered 스트림
stream.read을 호출 할 때마다 파일 시스템 레벨까지 내려가므로 비효율적이다.
Buffered 스트림을 이용하면 한번 호출시마다 버퍼에 담아서 가져오므로 효율적이다.
BufferedReader의 readLine 함수는 한줄 씩 버퍼에 담아서 가져온다.
java.nio 패키지에서 제공하는 인터럽트 가능한 채널은 스트림을 사용한 스레드가 인터럽트되었을 때 스트림을 닫는 인터럽션을 지원한다.
Filter 스트림
Filter스트림은 스트림들을 연결하여 더 유용한 복합 스트림을 만들어 낼 수 있다.
각각의 필터 스트림은 실제 입력과 출력 처리를 다른 스트림에 위임해야 한다.
Filter Stream은 데이터를 읽고 쓰고 변형하는 처리를 할 수 있다.
protected UpperCaseConverter(Reader reader) {
super(reader);
// TODO Auto-generated constructor stub
}
@Override
public int read() throws IOException {
// TODO Auto-generated method stub
//문자한개를 읽고 이를 정수로 변환.
int c = super.read();
return (c == -1 ? c : Character.toUpperCase((char ) c));
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
// TODO Auto-generated method stub
int nread = super.read(cbuf, off, len);
int last = off + nread;
for (int i = 0; i < last; i++) {
cbuf[i] = Character.toUpperCase(cbuf[i]);
}
return nread;
}
위 소스를 보면 오버라이드를 하지만 간단한 작업만 추가하고 나머지는 부모 클래스에게 위임한다.
위 소스를 보면 오버라이드를 하지만 간단한 작업만 추가하고 나머지는 부모 클래스에게 위임한다.
Buffered 스트림
stream.read을 호출 할 때마다 파일 시스템 레벨까지 내려가므로 비효율적이다.
Buffered 스트림을 이용하면 한번 호출시마다 버퍼에 담아서 가져오므로 효율적이다.
BufferedReader의 readLine 함수는 한줄 씩 버퍼에 담아서 가져온다.