>  기사  >  Java  >  JAVA 채널에 대한 자세한 설명

JAVA 채널에 대한 자세한 설명

怪我咯
怪我咯원래의
2017-06-25 10:14:052384검색

참고: 동시 프로그래밍 네트워크에서 재인쇄 – ifeve.com이 기사의 링크 주소:Java NIO 시리즈 튜토리얼(2) 채널

Channel

Java NIO의 채널은 스트림과 유사하지만 몇 가지 차이점이 있습니다.

  • 다음 중 하나에서 액세스할 수 있습니다. 채널에서 데이터를 읽을 수 있고 채널에 데이터를 쓸 수 있습니다. 그러나 읽기 및 쓰기 스트림은 일반적으로 단방향입니다.

  • 채널은 비동기적으로 읽고 쓸 수 있습니다.

  • 채널의 데이터는 항상 버퍼에서 먼저 읽혀지거나 항상 버퍼에서 쓰여져야 합니다.

위에서 언급한 것처럼 채널에서 버퍼로 데이터를 읽고 버퍼에서 채널로 데이터를 씁니다. 아래 그림과 같이:

1. 채널 구현

다음은 Java NIO에서 가장 중요한 채널의 구현입니다.

  • FileChannel

  • DatagramChannel

  • 소켓채널

  • ServerSocketChannel

FileChannel은 파일에서 데이터를 읽고 씁니다.

DatagramChannel은 UDP를 통해 네트워크의 데이터를 읽고 쓸 수 있습니다.

SocketChannel은 TCP를 통해 네트워크의 데이터를 읽고 쓸 수 있습니다.

ServerSocketChannel은 웹 서버처럼 새로 들어오는 TCP 연결을 모니터링할 수 있습니다. 각각의 새로운 수신 연결에 대해 SocketChannel이 생성됩니다.

2. 기본 채널 예제

다음은 FileChannel을 사용하여 버퍼로 데이터를 읽는 예제입니다.

public class Channel1 {public static void main(String[] args) {try {
            RandomAccessFile raf = new RandomAccessFile("./.gitignore","rw");
            FileChannel channel = raf.getChannel();     //获取通道ByteBuffer bf = ByteBuffer.allocate(50);    //通过静态allocate方法创建一个缓冲区,容量为50byte[] bytes = new byte[]{};
            bytes = "123".getBytes();
            bf = ByteBuffer.wrap(bytes);                //通过静态wrap方法,byte数组生成缓冲区,缓冲区中保留了原数据while(bf.hasRemaining()){
                System.out.print((char) bf.get());
            }int bytesRead ;while ((bytesRead = channel.read(bf)) != -1) {      //将通道中的数据写入缓冲区,并判断通道中的数据是否到末尾System.out.println("Read " + bytesRead);bf.flip();                                      //反转缓冲区 实际上就是将position置为0 后续buffer详细介绍while(bf.hasRemaining()){                       //判断缓冲区中是否还有值System.out.print((char) bf.get());          //输出缓冲区中的值                }
                bf.clear();                                     //清理缓冲区            }
            raf.close();                                        //关闭RandomAccessFile} catch (IOException e) {
            e.printStackTrace();
        }
    }
}

buf.flip() 호출에 주의하세요. 먼저 데이터를 읽어보세요. Buffer 에 넣은 다음 Buffer 를 뒤집은 다음 Buffer 에서 데이터를 읽습니다. 다음 섹션에서는 Buffer

에 대해 더 자세히 설명합니다.

위 내용은 JAVA 채널에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.