![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java nio
文章平均质量分 58
xushiyu1996818
这个作者很懒,什么都没留下…
展开
-
java nio selector理论总结
阻塞与非阻塞传统的IO流都是阻塞式的。也就是说,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行IO操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。Java NIO是非阻塞模式的。当线程从某通道进行读写数据时,若没有数据可用时,该线程可以进行其他任务。线程通常将非阻塞IO的空闲时间用于在其他通道上执行IO操作,所以单独的...原创 2022-02-22 21:29:18 · 674 阅读 · 0 评论 -
java nio channel理论总结
通道的简介Java NIO的Channel通道类,代表IO源与目标的连接,功能类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。DMA一个设备接口试图通过总线直接向外部设备(磁盘)传送数据时,它会先向CPU发送DMA请求信号。外部设备(磁盘)通过DMA的一种专门接口电路――DMA控制器(DMAC),向CPU提出接管总线控制权的总..原创 2022-02-22 21:26:21 · 249 阅读 · 0 评论 -
java nio Buffer理论总结
Buffer简介缓冲区(Buffer)就是在内存中预留指定大小的存储空间用来对输入/输出(I/O)的数据作临时存储,这部分预留的内存空间就叫做缓冲区:使用缓冲区有这么两个好处:1、减少实际的物理读写次数2、缓冲区在创建时就被分配内存,这块内存区域一直被重用,可以减少动态分配和回收内存的次数Buffer 主要属性属性 描述 Capacity 容量,即可以容纳的最大数据量;在缓冲区创建时被设定并且不能改变 Limit 表示缓冲区的当前终点,不能对缓冲区超过极限的位置进原创 2022-02-22 21:19:09 · 406 阅读 · 0 评论 -
java NIO理论总结
NIO与BIOBIO 与 NIO 区别1、NIO和传统IO(一下简称IO)之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的原创 2022-02-21 23:53:02 · 471 阅读 · 0 评论 -
java多线程 ReadWriteLock源码分析
package java.util.concurrent.locks;/** * ReadWriteLock维护一对相关联的锁,一个用于只读操作,一个用于写操作。 * 读锁可以被多个读线程同时持有,只要没有写线程。写锁是排他的。 * * <p>所有的ReadWriteLock实现必须保证writeLock操作的内存同步效果(在Lock接口中指定)也与相关的readLock保持一致。 * 也就是说,一个成功获得读锁的线程将看到在之前释放写锁时所做的所有更新。 * * <p.原创 2021-02-12 21:11:02 · 126 阅读 · 1 评论 -
java nio FileChannelImpl源码分析
简介package sun.nio.ch;import java.io.FileDescriptor;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.MappedByteBuffer;import java.nio.channels.ClosedByInterruptException;import java.nio.channels.ClosedChannelException;import原创 2021-01-17 20:50:58 · 1220 阅读 · 0 评论 -
java nio DatagramChannel源码分析
目录简介构造函数,方法2个open,validOps,bind,setOption方法socket,isConnected,connect,disconnect,getRemoteAddress方法receive,send,3个read,3个write,getLocalAddress简介package java.nio.channels;import java.io.IOException;import java.net.ProtocolFamily;import java原创 2021-01-01 12:20:26 · 249 阅读 · 0 评论 -
java nio SocketChannel源码分析
目录简介构造函数,2个open方法,方法validOps,bind,setOption,shutdownInput/Output方法socket,isConnected,isConnectionPending,connect,finishConnect,getRemoteAddress方法3个read,3个write,getLocalAddress简介package java.nio.channels;import java.io.IOException;import ja原创 2021-01-01 12:18:09 · 269 阅读 · 0 评论 -
java nio AbstractSelector源码分析
目录简介字段selectorOpen,provider,cancelledKeys,构造函数,方法cancel,close,implCloseSelector字段interruptor,方法isOpen,provider,cancelledKeys,register,deregister,begin,end简介package java.nio.channels.spi;import java.io.IOException;import java.nio.channels.Sele原创 2021-01-01 12:17:55 · 210 阅读 · 0 评论 -
java nio AbstractSelectionKey源码分析
package java.nio.channels.spi;import java.nio.channels.*;/** * 选择键的基实现类。 * * <p> 该类跟踪密钥的有效性并实现取消。 * * @author Mark Reinhold * @author JSR-51 Expert Group * @since 1.4 */public abstract class AbstractSelectionKey extends SelectionK.原创 2021-01-01 12:17:01 · 145 阅读 · 0 评论 -
java nio MulticastChannel源码分析
package java.nio.channels;import java.net.InetAddress;import java.net.NetworkInterface;import java.io.IOException;import java.net.ProtocolFamily; // javadocimport java.net.StandardProtocolFamily; // javadocimport java.net.StandardS..原创 2021-01-01 12:16:47 · 235 阅读 · 0 评论 -
java nio ServerSocketChannel源码分析
目录简介构造函数,方法open,validOps,bind,setOption,socket,accept,getLocalAddress简介package java.nio.channels;import java.io.IOException;import java.net.ServerSocket;import java.net.SocketOption;import java.net.SocketAddress;import java.nio.channels.spi.原创 2021-01-01 12:15:37 · 221 阅读 · 1 评论 -
java nio NetworkChannel源码分析
package java.nio.channels;import java.net.SocketOption;import java.net.SocketAddress;import java.util.Set;import java.io.IOException;/** * 到网络套接字的通道。 * * <p> 实现此接口的通道是到网络套接字的通道。 * bind方法用于将套接字绑定到本地SocketAddress,getLocalAddress方法返回套接字绑定到的..原创 2021-01-01 12:15:11 · 136 阅读 · 0 评论 -
io,nio,aio的区别与基础使用
IO 介绍我们通常所说的 BIO 是相对于 NIO 来说的,BIO 也就是 Java 开始之初推出的 IO 操作模块,BIO 是 BlockingIO 的缩写,顾名思义就是阻塞 IO 的意思。BIO、NIO、AIO的区别BIO 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用时可靠的线性顺序。它的有点就是代码比较简单、直观;缺点就是 IO 的效率和扩展性很低,容易成为应用性原创 2020-06-10 15:28:49 · 563 阅读 · 0 评论 -
java nio FileChannel源码分析
目录简介构造函数,字段NO_ATTRIBUTES,方法2个open,3个read,3个write方法2个position,size,truncate,force,transferTo,transferFrom,read,write内部类MapMode方法map,2个lock,2个tryLock简介package java.nio.channels;import java.io.*;import java.nio.ByteBuffer;import java.nio.M原创 2020-12-19 09:51:57 · 298 阅读 · 1 评论 -
java nio SelectorProvider源码分析
目录简介字段lock,provider,构造函数,方法loadProviderFromProperty,loadProviderAsService,provider方法2个openDatagramChannel,openPipe/Selector/ServerSocketChannel/SocketChannel,inheritedChannel简介package java.nio.channels.spi;import java.io.IOException;import j原创 2020-12-19 09:51:37 · 245 阅读 · 0 评论 -
java nio SelectionKey源码分析
目录简介构造函数,方法channel,selector,isValid,cancel方法2个interestOps,readyOps字段OP_XXX,方法isXXX(read,write,connect,accept)字段attachment,attachmentUpdater,方法attach,attachment简介package java.nio.channels;import java.util.concurrent.atomic.AtomicReferenceFi原创 2020-12-08 22:03:21 · 282 阅读 · 0 评论 -
java nio Selector源码分析
目录简介构造函数,方法open,isOpen,provider方法keys,selectedKeys,selectNow,2个select方法wakeup,close简介package java.nio.channels;import java.io.Closeable;import java.io.IOException;import java.nio.channels.spi.SelectorProvider;import java.util.Set;/**原创 2020-12-08 22:03:07 · 223 阅读 · 0 评论 -
java nio AbstractSelectableChannel源码分析
目录简介字段provider,keys,keyCount,keyLock,regLock,blocking,构造函数方法provider,addKey,findKey,removeKey,hasValidKeys方法isRegistered,keyFor,register方法implCloseChannel,implCloseSelectableChannel方法isBlocking,blockingLock,configureBlocking,implConfigureBlocki原创 2020-12-04 21:43:20 · 435 阅读 · 0 评论 -
java nio SelectableChannel源码分析
简介package java.nio.channels;import java.io.IOException;import java.nio.channels.spi.AbstractInterruptibleChannel;import java.nio.channels.spi.SelectorProvider;/** * 一种可以通过选择器多路复用的信道。 * * <p> 为了与选择器一起使用,必须首先通过register(Selector,int,Object原创 2020-12-04 21:40:38 · 343 阅读 · 0 评论 -
java nio InterruptibleChannel,AbstractInterruptibleChannel源码分析
目录InterruptibleChannelAbstractInterruptibleChannelInterruptibleChannelpackage java.nio.channels;import java.io.IOException;/** * 可以异步关闭和中断的通道。 * * <p> 实现此接口的通道是异步关闭的: * 如果一个线程在可中断通道上的I/O操作中被阻塞, * 那么另一个线程可能会调用该通道的关闭方法。 * 这将导致阻塞的线程原创 2020-12-04 21:39:30 · 227 阅读 · 0 评论 -
java nio ScatteringByteChannel,GatheringByteChannel源码分析
package java.nio.channels;import java.io.IOException;import java.nio.ByteBuffer;/** * 一种能将字节读入缓冲区序列的通道。 * * <p> 分散读操作在一次调用中将一个字节集合读入一个或多个给定的缓冲区序列中。 * 分散读取在实现网络协议或文件格式时通常是有用的, * 例如,将数据分组成段,由一个或多个固定长度的报头和可变长度的主体组成。 * 在GatheringByteChannel..原创 2020-12-04 21:36:58 · 179 阅读 · 0 评论 -
java nio SeekableByteChannel源码分析
package java.nio.channels;import java.nio.ByteBuffer;import java.io.IOException;/** * 保持当前position并允许改变position的字节通道。 * * <p> 可查找字节通道连接到一个实体,通常是一个文件, * 该实体包含一个可读写的可变长度的字节序列。可以通过position()查询和通过position(long)修改当前位置。 * 通道还提供对通道所连接的实体的当前大小的访问..原创 2020-12-02 22:43:39 · 506 阅读 · 0 评论 -
java nio ReadableByteChannel,WritableByteChannel,ByteChannel源码分析
目录ReadableByteChannelWritableByteChannelByteChannelReadableByteChannelpackage java.nio.channels;import java.io.IOException;import java.nio.ByteBuffer;/** * 可以读取字节的通道。 * * <p> 在任何给定的时间内,可读通道上只能进行一个读操作。 * 如果一个线程在一个通道上启动一个读操作, * 那原创 2020-12-02 22:43:28 · 1399 阅读 · 0 评论 -
java nio Channel源码分析
package java.nio.channels;import java.io.IOException;import java.io.Closeable;/** * 用于I/O操作的nexus。 * * <p> 通道表示与实体(如硬件设备、文件、网络套接字或程序组件)的开放连接, * 这些实体能够执行一个或多个不同的I/O操作,例如读或写操作。 * * <p> 通道要么是打开的,要么是关闭的。 * 通道在创建时是打开的,一旦关闭,它将保持关闭状态。 ..原创 2020-12-02 07:40:53 · 247 阅读 · 0 评论 -
java nio ByteBufferAsCharBufferB/L源码分析
目录简介ByteBufferAsCharBufferBByteBufferAsCharBufferL简介ByteBufferAsCharBufferB,内部含有一个ByteBuffer和offset。进行get和put操作时,调用ix(position),ix方法返回的是(i << 1) + offset,对应了ByteBuffer里对应的索引。操作时,调用Bits.get/putCharB,从而进行操作。ByteBufferAsCharBufferB和ByteBuf原创 2020-12-02 07:40:21 · 399 阅读 · 0 评论 -
java nio DirectCharBufferU/S源码分析
目录简介DirectCharBufferUDirectCharBufferS简介DirectCharBufferU和DirectByteBuffer基本没啥区别都是先定位一个address,然后根据索引i,对对应的地址进行操作,不同的是char是address + i << 1,byte是address + i << 0。其余的就是把对byte操作变成对char进行操作。DirectCharBufferS和DirectCharBufferU也基本没啥区别,原创 2020-12-02 07:39:56 · 449 阅读 · 0 评论 -
java nio HeapCharBuffer源码分析
目录简介3个构造函数,方法slice,duplicate,asReadOnlyBuffer方法ix,4个get,isDirect,isReadOnly,4个put,compact方法toString,subSequence,order简介由于HeapCharBuffer大部分代码和HeapByteBuffer类似,从操作byte数组改为操作char数组,所以这部分代码不进行注释和翻译package java.nio;/** * * 读写 HeapCharBuffer.原创 2020-12-02 07:39:33 · 832 阅读 · 0 评论 -
java nio CharBuffer源码分析
目录简介字段hb,offset,isReadOnly,2个构造函数方法allocate,4个wrap,read,slice,duplicate,asReadOnlyBuffer方法4个get,7个put方法hasArray,array,arrayOffset,compact,isDirect,equals,compareTo方法2个toString,length,charAt,subSequence,3个append,order,chars简介由于CharBuffer与Byt原创 2020-12-02 07:38:49 · 372 阅读 · 0 评论 -
java nio DirectByteBuffer源码分析
目录简介字段unsafe,arrayBaseOffset,unaligned,att,方法attachment内部类Deallocator,字段unsafe,address,size,capacity,构造函数,run方法字段cleaner,方法cleaner,5个构造函数,方法slice,duplicate,asReadOnlyBuffer方法address,ix,3个get,4个put方法compact,isDirect,isReadOnly,_get,_put方法getXX原创 2020-12-02 07:38:10 · 737 阅读 · 0 评论 -
java nio MappedByteBuffer源码分析
目录简介字段fd,2个构造函数方法checkMapped,mappingOffset,mappingAddress,mappingLength,isLoaded字段unused,方法load,force,isLoaded0,load0,force0简介package java.nio;import java.io.FileDescriptor;import sun.misc.Unsafe;/** * 一种直接字节缓冲区,其内容是文件的内存映射区域。 * * <原创 2020-11-29 16:17:52 · 362 阅读 · 0 评论 -
java nio HeapByteBufferR源码分析
package java.nio;/** * * * * 一个只读HeapByteBuffer。 * 这个类扩展了相应的read/write类, * 覆盖了修改方法(各种put和putXXX),以抛出一个ReadOnlyBufferException, * 覆盖了view-buffer方法以返回这个类的实例而不是超类的实例。 * */class HeapByteBufferR extends HeapByteBuffer { // For speed these fi.原创 2020-11-29 16:17:07 · 223 阅读 · 0 评论 -
java nio HeapByteBuffer源码分析
目录简介3个构造函数,方法slice,duplicate,asReadOnlyBuffer方法ix,3个get,isDirect,isReadOnly方法4个put,compact,_get,_put方法2个getXXX,2个putXXX,asXXXBuffer(char,short,int,long,float,double)简介package java.nio;/** * * 一个读/写HeapByteBuffer。 * */class HeapByte原创 2020-11-29 16:16:17 · 520 阅读 · 0 评论 -
java nio ByteOrder源码分析
package java.nio;/** * 用于字节顺序的类型安全枚举。 * * @author Mark Reinhold * @author JSR-51 Expert Group * @since 1.4 */public final class ByteOrder { private String name; private ByteOrder(String name) { this.name = name; } /**.原创 2020-11-28 14:11:00 · 479 阅读 · 1 评论 -
java nio ByteBuffer源码分析
目录简介字段hb,offset,isReadOnly,2个构造函数方法allocateDirect,allocate,2个wrap,slice,duplicate,asReadOnlyBuffer方法4个get,5个put方法array,arrayOffset,compact,isDirect,toString,hashCode,2个equals,compareTo字段bigEndian,nativeByteOrder,方法order,_get,_put方法getXXX,putX原创 2020-11-28 14:09:39 · 702 阅读 · 0 评论 -
java io和nio系列总结
源码分析说明本次源码分析基本是基于JAVA_VERSION="1.8.0_112" 的jdk版本IO系列字节流-输入流InputStream字节流-输出流字符流-输入流字符流-输出流...原创 2020-10-27 10:47:51 · 290 阅读 · 0 评论 -
java nio Buffer源码分析
目录简介字段mark,position,limit,capacity,address,构造函数方法capacity,2个position,2个limit,mark,reset方法flip,rewind,remaining,hasRemaining,isReadOnly方法hasArray,array,arrayOffset,isDirect方法2个nextGetIndex,2个nextPutIndex,2个checkIndex,markValue,truncate,discardMa原创 2020-11-21 11:52:28 · 184 阅读 · 1 评论