NIO边看边记 之 channel(二)

来源:互联网 发布:修改gps定位软件 编辑:程序博客网 时间:2024/06/04 20:14

通道channel就像流。通道中的数据总是先读到到buffer中(对于buffer来说是一个写操作),再从buffer中写到另一个通道总(相对于buffer来说是一个读操作)。
这里写图片描述
Channel主要分为两类:文件channel和网络channel,细分为4种。
FileChanel:从普通文件中读写数据
DatagramChannel:通过UDP读写网络中的数据
SocketChannel:通过TCP读写网络中的数据
ServerSocketChannel:监听新进来的TCP连接,对每个新进来的连接都创建一个SocketChannel
其中FileChannel不可以切换到非阻塞模式,不能应用到selector中。而所有套接字channel都可以应用到非阻塞模式
示例代码如下:

public static void main(String[] args) {        try {   //获取maven工程的resource的路径,这个获得的是绝对路径            String path = FileChannelTest.class.getResource("/").getPath();            //文件存放在resource目录下   String file = "data.txt";            RandomAccessFile randomAccessFile = new RandomAccessFile(path + file, "rw");            //创建channel   FileChannel fileChannel = randomAccessFile.getChannel();            ByteBuffer byteBuffer = ByteBuffer.allocate(5000);            //从channel中读取数据到buffer   int byteRead = fileChannel.read(byteBuffer);            while (byteRead != -1) {                byteBuffer.flip();                while (byteBuffer.hasRemaining()) {                    System.out.println((char)byteBuffer.get());                }                byteBuffer.clear();                byteRead = fileChannel.read(byteBuffer);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }
0 0