아래의 문서를 번역 및 요약하였습니다.
http://www.cs.brown.edu/courses/cs161/papers/j-nio-ltr.pdf

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

3. 채널과 버퍼(Channels and Buffers)

 3-1. 개요
 Channel과 Buffer는 NIO의 핵심 Object로 모든 I/O시에 사용된다.
 Channel은 original I/O와 유사하다.
 NIO의 모든 데이터는 어디든 Input, Output 될 수 있으며 모든 데이터는 Channel Object를 통해 이동된다.
 
 Buffer는 일반적으로 Container역할을 하는 Object이다.
 채널을 통해 이동되는 모든 데이터는 처음에 Buffer상에 로드된다, 즉 채널로 읽어들인 데이터는 Buffer로 읽을 수 있다.
 
 3-2. Buffer란 무엇인가?
 Buffer는 Write하거나 읽기위한 데이터가 저장되는 Object로 Original I/O에는 없는 NIO만의 특별한 개념이다
 NIO엣의 모든 data는 Buffer를 통해서만 Access하거나 사용할 수 있다
 Buffer는 기본적으로 배열이다.(A buffer is essentially an array)
 일반적으로 bytes 배열의 형태를 취하며, 다른 type의 배열로도 사용될 수 있다.
 물론 단순 배열이 아니라, 데이터의 처리를 위해 특별한 기능이 추가된 배열이라 보는것이 맞을 것이다.

 3-3. Buffer의 종류
  일반적으로 사용되는 Buffer는 ByteBuffer이다. 하지만 사용자는 용도에 따라서 아래의 Buffer를 사용할 수 있다.
  - ByteBuffer
  - CharBuffer
  - ShortBuffer
  - IntBuffer
  - LongBuffer
  - FloatBuffer
  - DoubleBuffer
  모든 Buffer는 Buffer Interface의 상속을 받는 형태이다.

 3-4. Channel이란 무엇인가?
  Channel은 데이터를 쓰거나 읽을수 있는 객체이다.
  Original I/O와 비교했을때 NIO는 Stream과 유사하다.
  앞서 언급했듯이 모든 데이터의 access는 Buffer object를 통해서만 가능하며, Channel에 직접 데이터를 쓰거나 읽을 수 없다.

 3-5. Channel의 종류
  Channel은 양방향(bi-directional)이라는 측면에서 stream과는 다르다.
  Stream이 inputstream이나 outputstream과 같이 단방향성 data의 이동이 있을수 있는 반면, Channel은 단일 object로 read와 write를 동시에 할 수 있다. 이것은 운영체제(특히 UNIX 계열)의 IO특성을 잘 반영한 모델이라 볼 수 있다.
 
 
 

+ Recent posts