摘要: 1.5.6、文件异步AIO @Slf4j public class AIOTest { public static void main(String[] args) { try { AsynchronousFileChannel channel = AsynchronousFileChannel.o 阅读全文
posted @ 2022-10-12 13:46 jpy 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 1.5.3、零拷贝 传统IO java 本身并不具备 IO 读写能力,因此 read 方法调用后,要从 java 程序的用户态切换至内核态,去调用操作系统(Kernel)的读能力,将数据读入内核缓冲区。这期间用户线程阻塞,操作系统使用 DMA(Direct Memory Access)来实现文件读, 阅读全文
posted @ 2022-10-12 13:44 jpy 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 1.5、NIO BIO 1.5.1、Stream Channel stream 不会自动缓冲数据,channel 会利用系统提供的发送缓冲区、接收缓冲区(更为底层) stream 仅支持阻塞 API,channel 同时支持阻塞、非阻塞 API,网络 channel 可配合 selector 实现多 阅读全文
posted @ 2022-10-12 13:39 jpy 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 1.4.5、多线程多work轮询 @Slf4j public class ThreadServerWorks { public static void main(String[] args) throws IOException, InterruptedException { Thread.curr 阅读全文
posted @ 2022-10-12 13:31 jpy 阅读(43) 评论(0) 推荐(0) 编辑
摘要: 1.4.4、多线程优化 设计思路:分两组选择器 单线程配一个选择器,专门处理accpet事件(建立连接) BOSS 创建多线程,每个线程一个选择器,专门处理read事件 WORK 服务端 @Slf4j public class ThreadServer { public static void ma 阅读全文
posted @ 2022-10-12 13:30 jpy 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 1.4.3、写入内容过多 服务端 public class WriteServer { public static void main(String[] args) throws IOException { ServerSocketChannel ssc = ServerSocketChannel. 阅读全文
posted @ 2022-10-12 13:27 jpy 阅读(36) 评论(0) 推荐(0) 编辑
摘要: 1.4.2、selector 单线程可以配合 Selector 完成对多个 Channel 可读写事件的监控,这称之为多路复用 只能用于网络IO,文件IO不可用,因为FileChannel没有阻塞模式 如果不用selector多路复用,线程一直在做无用功。selector能够 有可连接事件才去连接 阅读全文
posted @ 2022-10-12 13:24 jpy 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 1.4、网络编程 1.4.1 阻塞VS非阻塞 阻塞: ServerSocketChannel.accept() 阻塞到客户端连接 SocketChannel.read() 阻塞到客户端发送数据 //服务端 @Slf4j public class SocketServerTest { public s 阅读全文
posted @ 2022-10-12 13:22 jpy 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 1.3、文件编程 1.3.1、FileChannel 获取 FileInputStream 只能读 FileOutStream 只能写 RandomAccessFile 构造传参决定 rw:读写 读取 从channel读取填充到buffer channel.read(buffer); 返回读到的字节 阅读全文
posted @ 2022-10-12 13:19 jpy 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 1.2.3、ByteBuffer常见方法 public class TestBufferRead { public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.allocate(10); buffer.put(ne 阅读全文
posted @ 2022-10-12 13:16 jpy 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 1.2、ByteBuffer 1.2.1、使用 代码示例 准备一个文本,内容:1234567890abcd channel操作文本 @Slf4j public class TestByteBuffer { public static void main(String[] args) { try { 阅读全文
posted @ 2022-10-12 13:13 jpy 阅读(79) 评论(0) 推荐(0) 编辑
摘要: 1、NIO基础 non-blocking io 非阻塞io 1.1、三大组件 1.1.1、Channel&Buffer channel类似于stream,它就是读写数据的双向通道,可以从channel将数据读入buffer,也可以将buffer的数据写入channel,之前的stream要么是输入, 阅读全文
posted @ 2022-10-12 12:59 jpy 阅读(29) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示