IO&NIO
文章平均质量分 93
kris-liu
java开发
展开
-
Java NIO 文件IO-内存映射文件MappedByteBuffer与zerocopy
在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然后OS的内核代码负责将相应的文件数据读取到内核的IO缓冲区,然后再把数据从内核IO缓冲区拷贝到进程的私有地址空间中去,这样便完成了一次IO操作。这么做是为了减少磁盘的IO操作,为了提高性能而考虑的,因为我们的程序访问原创 2017-01-31 23:32:27 · 1994 阅读 · 0 评论 -
I/O 多路复用之select、poll、epoll实现原理及对比总结
select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核原创 2017-01-31 23:31:59 · 2748 阅读 · 0 评论 -
Java IO模型
目前常用的IO通信模型包括四种:阻塞同步I/O(blocking IO)非阻塞同步I/O(nonblocking IO)多路复用I/O(IO multiplexing)异步I/O(asynchronous IO)这些IO模型都是要靠底层操作系统进行支持,应用程序只是提供相应的实现,对操作系统进行调用。本文将介绍这四种IO模型及Java对这四种IO模型的支持。对于一次IO访问(以read举例原创 2016-12-18 16:00:24 · 710 阅读 · 0 评论 -
Java NIO Selector详解
Selector选择器Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够发现通道是否为读写等事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。Selector的实现根据JVM运行的操作系统不同会有相应的不同的实现,上层API对底层做了抽象,这样上层API无需关心底层操作系统的变化,可以在不同操作系统上实现相同的功能。实现了Sele原创 2017-01-24 00:33:56 · 1571 阅读 · 0 评论 -
Java NIO Channel详解
Channel通道在JAVA NIO中,基本上所有的IO都是从Channel开始的,读取操作即从Channel读到Buffer,写操作即从Buffer写入Channel。在网络IO方面,Channel的主要实现是DatagramChannel、SocketChannel和ServerSocketChannel,DatagramChannel 能通过UDP读写网络中的数据。SocketChanne原创 2017-01-18 22:34:56 · 1120 阅读 · 0 评论 -
Java NIO Buffer详解
Buffer缓冲区缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程。所有的缓冲区都具有四个属性来提供关于其所包含的数据元素的信息。它们是: 容量(Capacity) 缓冲区能够容纳的数据元素的最大数量。这一容量在缓冲区创建时被设定,并且永远不能被改变。 上界(Limit) 缓冲区的第一个不能被读或写的元素。或者说,缓冲区中现存元素的计数。 位置(Position) 下一个要被读或原创 2017-01-14 23:47:02 · 761 阅读 · 0 评论