网站下载视频软件,老公给人做网站结果网站卖假货,张家港做网站的公司,滨州网站网站建设转载自 Java NIO系列教程#xff08;二#xff09; Channel译文链接 作者#xff1a;Jakob Jenkov 译者#xff1a;airu 校对#xff1a;丁一
Java NIO的通道类似流#xff0c;但又有些不同#xff1a;
既可以从通道中读取数据#xff0c;又可以写数据到通…转载自 Java NIO系列教程二 Channel译文链接 作者Jakob Jenkov 译者airu 校对丁一
Java NIO的通道类似流但又有些不同
既可以从通道中读取数据又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer或者总是要从一个Buffer中写入。
正如上面所说从通道读取数据到缓冲区从缓冲区写入数据到通道。如下图所示Channel的实现
这些是Java NIO中最重要的通道的实现
FileChannelDatagramChannelSocketChannelServerSocketChannel
FileChannel 从文件中读写数据。
DatagramChannel 能通过UDP读写网络中的数据。
SocketChannel 能通过TCP读写网络中的数据。
ServerSocketChannel可以监听新进来的TCP连接像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
基本的 Channel 示例
下面是一个使用FileChannel读取数据到Buffer中的示例
01RandomAccessFile aFile new RandomAccessFile(data/nio-data.txt, rw);02FileChannel inChannel aFile.getChannel();03 04ByteBuffer buf ByteBuffer.allocate(48);05 06int bytesRead inChannel.read(buf);07while (bytesRead ! -1) {08 09System.out.println(Read bytesRead);10buf.flip();11 12while(buf.hasRemaining()){13System.out.print((char) buf.get());14}15 16buf.clear();17bytesRead inChannel.read(buf);18}19aFile.close();注意 buf.flip() 的调用首先读取数据到Buffer然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。