NIO는 New Input Ouput의 약자로 기존 java.io 패키지를 개선한 새로운 입출력 패키지이다. 대표적으로 inputStream과 outputStream을 합쳐놓은 듯이 입력과 출력이 모두 가능한 FileChannel 클래스가 있다.
while 문 마지막에 butter.clear() 해주는 이유는 버퍼의 크기가 파일의 크기보다 작을 수 있으니까 버퍼를 비워주고 다시 받기 위함.
AsynchronousFileChannel 클래스를 이용하면 논-블로킹 방식 입출력을 지원하여 read(), write() 작업이 완료되지 않더라도 다른 작업을 동시에 수행할 수 있다.