![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
NIO
文章平均质量分 81
欧阳田
生活没有对与错,一路爬行。
展开
-
NIO学习(十三):网络编程IO、NIO和Netty的写法
背景整理网络编程的基本写法(IO 、NIO、Netty)。IO服务端 public static void main(String[] args) throws IOException { ExecutorService pool = Executors.newCachedThreadPool(); ServerSocket serverSocket =...原创 2019-10-25 11:04:19 · 255 阅读 · 0 评论 -
NIO学习(十二):Java NIO的MappedByteBuffer的简单使用
背景把磁盘上的文件映射到内存中,在内存中直接修改内容,磁盘上的文件内容也随之更改。MappedByteBuffer准备一个文件mappedbytebuffer.txt,内容为aaaaaa测试代码public static void main(String[] args) throws Exception{ RandomAccessFile randomAcces...原创 2019-10-25 09:53:42 · 398 阅读 · 0 评论 -
NIO学习(十一):Java NIO的FileChannel的简单使用
背景java.io包下的FileInputStream和FileOutputStream持有java.nio.channels包下 的FileChannle引用,并提供getChannle方法。简单使用准备两个文件,一个是input.txt,一个是output.txt。input.txt中的内容是Hello FileChannel.output.txt中的内容是空的。测试代码:...原创 2019-10-25 09:44:05 · 239 阅读 · 0 评论 -
NIO学习(十):Java NIO的零拷贝知识
背景在什么地方使用NIO和AIO?场景:网络应用编程,需要服务端和客户端。多机之间进行传输数据的场景在什么地方使用IO?场景:单机。不需要服务端和客户端。就是常使用的包装类(Reader, Writer;Inputstream, Outputstream)。JDK NIO中有FileChannle#t=transferTo(0, fileChannel.size(), socketCh...原创 2019-10-24 18:16:40 · 737 阅读 · 0 评论 -
NIO学习(九):Java NIO的HeapByteBuffer(堆上内存)和DirectByteBuffer(堆外内存)的思考
背景要理解JVM的内存模型,应该提出一些什么问题?问题:a) 内存区域是否是线程共享的?b) 内存区域存储的是什么?c) 内存区域相互之间大小比例关系?eden : from : to = 8 : 1 : 1d) 内存区域相互之间的联系?比如对象从伊甸园到新生代到老年代的过程。e) 内存区域是堆上的还是堆外的?f) 永久代是堆上还是堆外?又应该如何理解?本地内存可以理...原创 2019-10-23 14:59:27 · 3004 阅读 · 0 评论 -
NIO学习(八):Java NIO的Buffer的slice和asReadOnlyBuffer方法以及链式写法
背景无论是slice()方法还是asReadOnlyBuffer()方法,他们虽然会返回一个Buffer的具体实例,但是都是指向同一个内存区域。slice 和 asReadOnlyBufferslice测试代码 public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.alloca...原创 2019-10-21 15:50:49 · 1525 阅读 · 0 评论 -
NIO学习(七):Java NIO的Buffer的scattering和gathering理解
背景scatting和gathering研究的是一个buffer数组。在这个buffer数组中持有多个Buffer实例,每个Buffer都是独立的,都有自己独立的capacity,limit,position值。buffer数组中的buffer实例唯一相互联系的地方就是:从第一个buffer数组中的Buffer实例开始,依次读满后才往后面的Buffer实例移动。写也是如此。从数组中的第一个B...原创 2019-10-21 14:55:56 · 357 阅读 · 0 评论 -
NIO学习(六):Java NIO的Buffer属性(capacity,position,limit,mark)理解
背景Java NIO中提供了7种基础数据类型的Buffer,分别是:ByteBuffer, CharBuffer,ShortBuffer, LongBuffer, FloatBuffer, DoubleBuffer,它们都继承抽象类Buffer。抽象类Buffer的底层就是装字节的容器(字节数组容器)。Buffer有3个很重要的属性,capactiy, position,limit。当b...原创 2019-10-21 11:12:16 · 1068 阅读 · 0 评论 -
NIO学习(五):Java NIO的Selector、Channel、Buffer相互之间的关系
背景Selector、Channel与Buffer相互之间的对应关系?Selector、Channel与Buffer大致交互过程是怎样的?过程一个Selector实例可以对应多个不同的Channel实例。每个独立的Channle实例有唯一一个与之对应的Buffer实例。Buffer就是一块内存区域,读和写都必须通过Buffer。因为整个I/O操作的连接点其实是Channle,...原创 2019-10-21 10:28:51 · 801 阅读 · 0 评论 -
NIO学习(四):Java NIO的Selector核心类图
背景整理NIO的Selector核心类的类体系结构图。过程不同操作系统有不同的JDK支持,本地是Windows。关键点是抽象类Selector依赖SelectorProvider和SelectionKey。小结Selector的open()方法,是JDK源码SelectorProvider调用provider()方法返回Selector实例。后续Channel使用re...原创 2019-10-20 19:59:26 · 393 阅读 · 0 评论 -
NIO学习(三):Java NIO的Buffer核心类图
背景整理NIO的Buffer核心类的类体系结构图。基础数据类型与Buffer的组织关系图。ByteBuffer与Buffer的组织关系图。基础数据类型与Buffer的组织关系图DirectByteBuffer可以理解为堆外内存,一般采用navtive方法通过JNI方式实现。HeapByteBuffer可以理解为JVM的堆上内存。因为DirectByteBuffer是Java...原创 2019-10-20 19:18:09 · 372 阅读 · 0 评论 -
NIO学习(二):Java NIO的Channle核心类图
背景整理NIO核心类的类体系结构图。SocketChannle与Channle的组织关系图。ServerSocketChannle与Channel的组织关系图。FileChannle与Channle的组织关系图。过程SocketChannle与Channle的组织关系图。ServerSocketChannle与Channel的组织关系图。FileChannle与...原创 2019-10-20 18:31:33 · 371 阅读 · 0 评论 -
NIO学习(一):基本概念
背景Java IO 和 NIO 相关知识都是研究内核空间和用户空间(应用程序)之间的相互关系:从内核空间拷贝到用户空间?涉及到零拷贝知识。用户空间等待内核空间准备数据?阻塞知识用户空间不等待内核空间准备数据?非阻塞知识用户空间去主动去内核空间读数据?同步知识内核空间准备好数据回调给用户空间?异步知识基本概念阻塞IO(BIO,Blocking Input Output)...原创 2019-10-20 16:51:35 · 240 阅读 · 0 评论