【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

java nio理解(2)

原创 2016年08月28日 15:32:37

通道(Channel)


  • 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
  • 通道可以异步地读写。
  • 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示: 
 

Channel的实现 

这些是Java NIO中最重要的通道的实现: 

  • FileChannel:从文件中读写数据。
  • DatagramChannel:能通过UDP读写网络中的数据。
  • SocketChannel:能通过TCP读写网络中的数据。
  • ServerSocketChannel:可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
基本的 Channel 示例 

下面是一个使用FileChannel读取数据到Buffer中的示例: 

Java代码 
  1. RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt""rw");  
  2. FileChannel inChannel = aFile.getChannel();  
  3.   
  4. ByteBuffer buf = ByteBuffer.allocate(48);  
  5.   
  6. int bytesRead = inChannel.read(buf);  
  7. while (bytesRead != -1) {  
  8.   
  9. System.out.println("Read " + bytesRead);  
  10. buf.flip();  
  11.   
  12. while(buf.hasRemaining()){  
  13. System.out.print((char) buf.get());  
  14. }  
  15.   
  16. buf.clear();  
  17. bytesRead = inChannel.read(buf);  
  18. }  
  19. aFile.close();  

注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。 

  • 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
  • 通道可以异步地读写。
  • 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示: 
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Java NIO2

http://developer.51cto.com/art/200911/165703.htm http://developer.51cto.com/art/201112/307728.htm ...

JAVA 中BIO,NIO,AIO的理解

在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下: 序号 问题 <br style="line-height: 25.20000

Java NIO(2):缓冲区基础

转  http://www.cnblogs.com/zhuYears/p/3184116.html 缓冲区(Buffer)对象是面向块的I/O的基础,也是NIO的核心对象之一。在NI...

理解Java NIO

对于Java NIO,总是看见别人写,使用Java NIO能够提高性能,比BIO的性能要好挺多,但是一直未能深入的研究,不太清楚NIO到底是怎么来提高性能的,Non-blocking到底体现在哪里。这几天搜索了一个,找到一些讲的比较好的文章,并实际写了一个小的程序来理解一下,对NIO有了更进一步的理解。   所参考查询的资料如下: 1. JAVA NIO 简介  <a href="http://www.iteye.com/to

Java NIO(2): 缓冲区基础

源文档 file:///E:\Edison\Books\Java\NIO\Java%20NIO(2)-缓冲区基础.docx>   缓冲区(Buffer)对象是面向块的I/O的基础,也是NIO的核心...
  • xeseo
  • xeseo
  • 2013-10-17 10:21
  • 703

java NIO 学习 聊天室程序 (2)

有了Command 接口,我们可以定义一些命令: 这些命令也代表了一些基本的需求 [list] 1. @pub 向聊天室中发广播消息 2. @quit 退出聊天室 , 如果断线,聊天室可以自动将与客户端的连接断开 3. @listmember 查看聊天室中的所有人 4. @login username password 以用户名和密码登陆服务器 5. @regist username password 注册用户 6. @usr username|socket address 向特定用户发消息 [/list] 有了以上需求的话,我们就需要定义一些数据结构:

JAVA 中BIO,NIO,AIO的理解

在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下:  序号 问题  1 什么是同步?  2 什么是异步?  3 什么是阻塞?  4 什么是非阻塞?  5 什么是同...

深入理解Apache Mina (6)---- Java Nio ByteBuffer与Mina ByteBuffer的区别

为了对后续关于Mina 的 ProtocolFilter( 编解码器 <span style="font-

JAVA 中BIO,NIO,AIO的理解

在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下:  序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什...

Java NIO 第一章(2)

第一章 简介
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)