Java 1.0에 포함된 Input/Output Stream에는 BufferedInputStream, BufferedOutputStream이라는 구현체가 있다.내부적으로 버퍼를 사용하는데, 이 버퍼는 JVM Heap에 존재하는 버퍼이다. 그리고 실제로 리소스를 읽어오려면 커널 영역의 버퍼를 통해 복사를 해와야 하는데 이 과정에서 CPU 자원을 사용하게 된다.반면 커널 영역의 버퍼를 바로 사용할 경우 Disk Controller에 의해 CPU 도움 없이 리소스를 버퍼로 바로 복사할 수 있다. Java 1.4에서 등장한 Java NIO에서는 Channel과 Buffer를 통해 리소스와 통신을 하게 되며ByteBuffer를 활용하는 경우 DirectByteBuffer, HeapByteBuffer 2가지로 제공..