NIO
java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。
诗水人间
要想走的更远,就需要思考更深层次的问题。冷静、智慧、深沉是我所向往的
展开
-
NIO 中 阻塞和非阻塞式IO。NIO完成网络通信
阻塞与非阻塞传统的 IO 流都是阻塞式的。也就是说,当一个线程调用 read() 或 write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行 IO 操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降。Java NIO 是非阻塞模式的。当线程从...原创 2020-01-20 03:59:59 · 131242 阅读 · 0 评论 -
NIO中的字符编码问题
获取所有编码import org.junit.jupiter.api.Test;import java.io.IOException;import java.nio.charset.Charset;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class Channel...原创 2020-01-05 01:34:45 · 124488 阅读 · 0 评论 -
NIO的分散读取(Scatter Reads)和聚集写入(Gather Writes)
分散读取:(数据从一个通道到多个缓存) 从Channel中读取的数据分散到Buffer中(按照缓冲区的顺序,从Channel中读取的数据依次填满Buffer)聚集写入:(数据从多个缓存区到一个通道)将多个Buffer数据 “聚集“ 写入到通道中import org.junit.jupiter.api.Test;import java.io.IOExc...原创 2020-01-05 01:07:55 · 133654 阅读 · 0 评论 -
NIO中的Channel的使用
通道的主要实现类import java.nio.channels.DatagramChannel;import java.nio.channels.FileChannel;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;获取通道的方式JAVA针对支持通道...原创 2020-01-04 23:41:44 · 131135 阅读 · 0 评论 -
直接缓冲区和非直接缓冲区
非直接缓冲区的方式读写操作:会发现中间多了copy过程直接缓冲区:在物理内存中建立一个物理内存缓冲区原创 2020-01-04 02:19:26 · 131338 阅读 · 0 评论 -
NIO缓冲区(Buffer)的存取和常用方法
缓冲区的4个概念:position :当前位置 mark :标记位置(可以reset直接跳到标记位置) limit :允许读取的位置 capacity:缓冲区大小缓冲区的使用相当于position的移动(最大到limit位置)每读多少就移动多少。import org.junit.jupiter.api.Test;import java.nio.ByteBuffer;...原创 2020-01-04 01:16:44 · 145073 阅读 · 0 评论 -
通道(Channel)与缓冲区(Buffer)
Channel负责传输、Buffer负责存储Java NIO系统的核心在于: 通道(Channel)和缓冲区(Buffer)。通道表示打开到 IO 设备(例如:文件、套接字)的连接。若需要使用NIO 系统,需要获取用于连接 IO 设备的通道以及用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理缓冲区(Buffer):一个用于特定基本数据类型的容器。由 j...原创 2019-12-13 01:06:47 · 131859 阅读 · 0 评论 -
IO与NIO的区别
Java NIO(New IO) 是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。Java NIO 与 IO 的主要区别IO NIO 面向流(Stream O...原创 2019-12-13 00:48:00 · 143547 阅读 · 1 评论