
NIO
闫二白
单身汪一枚
展开
-
序列化与反序列化
1. 什么是序列化? java序列化是指把java对象转换为字节序列的过程,而java反序列化是指把字节序列恢复为java对象的过程 序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存的java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。...原创 2019-08-15 11:02:53 · 133 阅读 · 0 评论 -
IO模型(BIO,NIO,AIO)及其区别
同步、异步,阻塞、非阻塞概念 io操作分为两部分,发起io请求,和io数据读写。阻塞、非阻塞主要是针对线程发起io请求后,是否立即返回来定义的,立即返回称为非阻塞io,否则称为阻塞io。 同步、异步主要针对io数据读写来定义的,读写数据过程中不阻塞线程称为异步io,否则,称为同步io。 BIO:同步阻塞IO BIO:线程发起io请求后,一直阻塞(阻塞io),直到数据就绪后,用户线程将数据写入s...原创 2019-08-15 11:50:15 · 563 阅读 · 0 评论 -
NIO总结(一) NIO之Buffer
引言:为什么会出现NIO? 我们知道JDK很早就提供对IO操作-----BIO(同步阻塞IO),那为什么还要提供NIO呢?翻阅了一些资料以后,我觉得NIO出现的原因主要是为了解决BIO中不必要的线程上下文切换。 下面我们以聊天室来解释: 我们知道BIO是阻塞式IO,当服务端接受到一个Socket连接的时候,我们需要开一个线程来处理这个Socket连接中的网络请求(单线程是无法同时处理多个Socke...原创 2019-08-15 18:14:19 · 187 阅读 · 0 评论 -
NIO总结(二) NIO之Channel
Channel NIO把它支持的I/O对象抽象为Channel,Channel又称“通道”,类似于原I/O中的流(Stream),但有所区别: 1、流是单向的,通道是双向的,可读可写。 2、流读写是阻塞的,通道可以异步读写。 3、流中的数据可以选择性的先读到缓存中,通道的数据总是要先读到一个缓存中,或从缓存中写入 eg:使用FileChannel(一个用来写、读、映射和操作文件的通道)进行文件...原创 2019-08-15 19:19:46 · 251 阅读 · 0 评论 -
NIO总结(三) NIO之Selector
引言: 之前我们使用BIO进行socket编程时,accept方法会一直阻塞,直到有客户端请求的到来,并返回socket进行相应的处理。整个过程是流水线的,处理完一个请求,才能去获取并处理后面的请求,当然也可以把获取socket和处理socket的过程分开,一个线程负责accept,一个线程池负责处理请求。 但NIO提供了更好的解决方案,采用选择器(Selector)返回已经准备好的socket,...原创 2019-08-15 23:03:08 · 479 阅读 · 2 评论 -
NIO总结(四) NIO之Pipe
首先给大家介绍下原理:Pipe就是个空管子,这个空管子一头可以从管子里往外读,一头可以往管子里写,并且是FIFO结构 操作流程: 首先要有一个对象往这个空管子里面写。写到哪里呢?这个空管子是有一点空间的,就在这个管子里。 写的时候就是写到管子本身包含的这段空间里的。这段空间好像是1024个字节(根据需求设置)。 然后另一个对象才能将这个装满了的管子里的内容读出来。 简单例子 ...原创 2019-08-15 23:10:29 · 209 阅读 · 0 评论