随笔分类 -  NIO

摘要:前言 前端的面试中经常问的 TCP 和 UDP 的区别,网上也有好多内容,TCP 和 UDP 的区别: TCP 是面向连接的,UDP 是面向无连接的 UDP程序结构较简单 TCP 是面向字节流的,UDP 是基于数据报的 TCP 保证数据正确性,UDP 可能丢包 TCP 保证数据顺序,UDP 不保证 阅读全文
posted @ 2020-01-20 10:32 reload 阅读(254) 评论(0) 推荐(0)
摘要:1.引子 最近看了一篇文章《蚂蚁消息中间件 (MsgBroker) 在 YGC 优化上的探索》 文章涉及JVM的垃圾回收,主要讲的是通过使用「堆外内存」对Young GC进行优化 文章中介绍,MsgBroker消息中间件会对消息进行缓存,JVM需要为被缓存的消息分配内存,首先会被分配到年轻代。 当缓 阅读全文
posted @ 2020-01-20 10:32 reload 阅读(4672) 评论(0) 推荐(0)
摘要:当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。 1. Java NIO和IO的主要区别 下表总结了Java NIO和IO之间的主要差别,我 阅读全文
posted @ 2020-01-20 10:31 reload 阅读(154) 评论(0) 推荐(0)
摘要:非阻塞模式与选择器搭配会工作的更好,通过将一或多个SocketChannel注册到Selector,可以询问选择器哪个通道已经准备好了读取,写入等 上面已经分别介绍过SocketChannel和Selector 但是非阻塞模式与选择器搭配工作的代码没有整合。 如下就是非阻塞模式使用选择器的代码: p 阅读全文
posted @ 2020-01-20 10:30 reload 阅读(835) 评论(0) 推荐(0)
摘要:java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。 打开 DatagramChannel 下面是 DatagramChannel 的打开方式: DatagramChannel chan 阅读全文
posted @ 2020-01-20 10:28 reload 阅读(463) 评论(0) 推荐(0)
摘要:SocketChannel 1. SocketChannel概述 Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 1.1 打开 SocketChannel 下面是SocketChannel的打开方式: Socke 阅读全文
posted @ 2020-01-20 10:27 reload 阅读(2374) 评论(1) 推荐(0)
摘要:Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileChannel 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使 阅读全文
posted @ 2020-01-20 10:26 reload 阅读(266) 评论(0) 推荐(0)
摘要:为什么使用Selector? 仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开销很大,而且每个线程都要占用系统的一些资源(如内存)。因此,使用的线程越少越好。 但是,需要记住,现代的操作系统和 阅读全文
posted @ 2020-01-20 10:25 reload 阅读(217) 评论(0) 推荐(0)
摘要:Buffer的基本用法 使用Buffer读写数据一般遵循以下四个步骤: 当向buffer写入数据时,buffer会记录下写了多少数据。一旦要读取数据,需要通过flip()方法将Buffer从写模式切换到读模式。在读模式下,可以读取之前写入到buffer的所有数据。 一旦读完了所有的数据,就需要清空缓 阅读全文
posted @ 2020-01-20 10:21 reload 阅读(395) 评论(0) 推荐(0)
摘要:概述 Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。 正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示: 阅读全文
posted @ 2020-01-20 10:20 reload 阅读(268) 评论(0) 推荐(0)
摘要:概述 Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件 阅读全文
posted @ 2020-01-20 10:19 reload 阅读(186) 评论(0) 推荐(0)