채널과 버퍼는 NIO의 핵심 개체이며 거의 모든 I/O 작업에 사용됩니다.
채널은 원래 I/O 패키지의 스트림을 시뮬레이션합니다. 모든 대상(또는 어디에서든)으로 전달되는 모든 데이터는 채널 개체를 통과해야 합니다. 버퍼는 본질적으로 컨테이너 개체입니다. 채널로 전송된 모든 객체는 먼저 버퍼에 배치되어야 하며, 마찬가지로 채널에서 읽은 모든 데이터도 버퍼로 읽어야 합니다.
버퍼란 무엇인가요?
Buffer는 쓰거나 읽을 일부 데이터가 포함된 개체입니다. NIO에 버퍼 객체를 추가하는 것은 새 라이브러리와 원래 I/O 사이의 중요한 차이점을 반영합니다. 스트림 지향 I/O에서는 Stream 개체에 직접 데이터를 쓰거나 읽습니다.
NIO 라이브러리에서는 모든 데이터가 버퍼를 사용하여 처리됩니다. 데이터를 읽을 때 버퍼로 직접 읽혀집니다. 데이터가 기록되면 버퍼에 기록됩니다. NIO의 데이터에 액세스할 때마다 해당 데이터를 버퍼에 저장하게 됩니다.
버퍼는 기본적으로 배열입니다. 일반적으로 바이트 배열이지만 다른 종류의 배열도 사용할 수 있습니다. 그러나 버퍼는 단순한 배열 그 이상입니다. 버퍼는 데이터에 대한 구조화된 액세스를 제공하고 시스템의 읽기/쓰기 프로세스를 추적할 수도 있습니다.
버퍼 유형
가장 일반적으로 사용되는 버퍼 유형은 ByteBuffer입니다. ByteBuffer는 기본 바이트 배열에 대해 가져오기/설정 작업(즉, 바이트 가져오기 및 설정)을 수행할 수 있습니다.
ByteBuffer는 NIO의 유일한 버퍼 유형이 아닙니다. 실제로 모든 기본 Java 유형에는 버퍼 유형이 있습니다.
ByteBuffer CharBuffer ShortBuffer IntBuffer LongBuffer FloatBuffer DoubleBuffer
모든 Buffer 클래스는 Buffer 인터페이스의 인스턴스입니다. ByteBuffer를 제외하고 모든 Buffer 클래스는 정확히 동일한 작업을 수행하지만 처리하는 데이터 유형은 다릅니다. 대부분의 표준 I/O 작업은 ByteBuffer를 사용하기 때문에 모든 공유 버퍼 작업과 일부 고유 작업이 있습니다.
이제 잠시 시간을 내어 형식화된 버퍼 사용 예제가 포함된 UseFloatBuffer.java를 실행할 수 있습니다.
채널이란 무엇인가요?
채널은 데이터를 읽고 쓸 수 있는 객체입니다. NIO를 원래 I/O와 비교하면 채널은 스트림과 같습니다.
앞서 언급했듯이 모든 데이터는 Buffer 개체를 통해 처리됩니다. 채널에 직접 바이트를 쓰지 않고, 대신 하나 이상의 바이트를 포함하는 버퍼에 데이터를 씁니다. 다시 말하지만, 채널에서 직접 바이트를 읽는 것이 아니라 채널에서 버퍼로 데이터를 읽고 버퍼에서 이 바이트를 가져옵니다.
채널 유형
채널과 스트림의 차이점은 채널이 양방향이라는 것입니다. 스트림은 한 방향으로만 이동하지만(스트림은 InputStream 또는 OutputStream의 하위 클래스여야 함) 채널은 읽기, 쓰기 또는 두 가지 모두에 사용될 수 있습니다.
채널은 양방향이기 때문에 스트림보다 기본 운영 체제의 현실을 더 잘 반영할 수 있습니다. 특히 UNIX 모델에서는 기본 운영 체제 채널이 양방향입니다.
위 내용은 Java NIO 채널과 버퍼는 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!