
NIO
GarfieldEr007
这个作者很懒,什么都没留下…
展开
-
Java NIO学习系列七:Path、Files、AsynchronousFileChannel
相对于标准Java IO中通过File来指向文件和目录,Java NIO中提供了更丰富的类来支持对文件和目录的操作,不仅仅支持更多操作,还支持诸如异步读写等特性,本文我们就来学习一些Java NIO提供的和文件相关的类: Java NIO Path Java NIO Files Java NIO AsynchronousFileChannel 总结1.Java NI...转载 2019-12-13 22:58:59 · 749 阅读 · 0 评论 -
Java NIO学习系列六:Java中的IO模型
前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型:阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multiplexing) 异步I/O(asynchronous IO) 但是前面总结的IO模型只是限定在linux下,更偏向于操作系统底层的概念,并没有涉及到Java应用层面,其实Java中也提供...转载 2019-12-13 22:57:55 · 696 阅读 · 0 评论 -
Java NIO学习系列五:I/O模型
前面总结了很多IO、NIO相关的基础知识点,还总结了IO和NIO之间的区别及各自适用场景,本文会从另一个视角来学习一下IO,即IO模型。什么是IO模型?对于不同人、在不同场景下给出的答案是不同的,所以先限定一下本文的上下文:Linux环境下的network IO。 本文会从如下几个方面展开: 一些基础概念 I/O模型 总结1.一些基础概念 IO模型这个概念...转载 2019-12-13 22:57:05 · 645 阅读 · 0 评论 -
Java NIO学习系列四:NIO和IO对比
前面的一些文章中我总结了一些Java IO和NIO相关的主要知识点,也是管中窥豹,IO类库已经功能很强大了,但是Java 为什么又要引入NIO,这是我一直不是很清楚的?前面也只是简单提及了一下:因为性能,但是仅仅是因为性能吗,除此之外是否还有别的原因,或者说既然NIO性能好,那为什么现在我们还在使用IO。本节我们就来详细对比一下两者的特性以及两者之间的不一致对我们编码所带来的影响。 同样,本...转载 2019-12-13 22:55:40 · 713 阅读 · 0 评论 -
Java NIO学习系列三:Selector
前面的两篇文章中总结了Java NIO中的两大基础组件Buffer和Channel的相关知识点,在NIO中都是通过Channel和Buffer的协作来读写数据的,在这个基础上通过selector来协调多个channel以同时读写数据,本文我们就来学习一下selector。 Java NIO中引入了"selector"的概念,一个selector其实是一个Java对象,能够通过诸如连接打开、数...转载 2019-12-13 22:54:32 · 661 阅读 · 0 评论 -
Java NIO学习系列二:Channel
上文总结了Java NIO中的Buffer相关知识点,本文中我们来总结一下它的好兄弟:Channel。上文有说到,Java NIO中的Buffer一般和Channel配对使用,NIO中的所有IO都起始于一个Channel,一个Channel就相当于一个流,,可以从Channel中读取数据到Buffer,或者写数据到Channel中。 Channel简介 FileChannel S...转载 2019-12-13 22:49:02 · 717 阅读 · 0 评论 -
Java NIO学习系列一:Buffer
从本文开始我会开始总结NIO部分,Java NIO(注意,这里的NIO其实叫New IO)是用来替换标准Java IO以及Java 网络API的,其提供了一系列不同与标准IO API的方式来处理IO,从JDK1.4开始引入,其目的在于提高速度。 之所以能够提高速度是因为其所使用的结构更接近于操作系统执行I/O的方式:通道和缓冲器。我们可以把它想象成一个煤矿,通道是一个包含煤层(数据)的矿藏,...转载 2019-12-13 22:48:16 · 762 阅读 · 0 评论 -
JAVA NIO之文件通道
1.简介通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作。与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动。通道既可以读,也可以写。这里我们举个例子说明一下,我们可以把通道看做水管,把缓存看做水塔,把文件看做水库,把水看做数据。当从磁盘中将文件数据读取到缓存中时,就是从水库向水塔里抽水。当然,从磁盘里读取数据并不会将读...转载 2018-12-22 18:49:31 · 694 阅读 · 0 评论 -
Java NIO之套接字通道
1.简介前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 – 套接字通道。在展开说明之前,咱们先来聊聊套接字的由来。套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为Berkeley sockets。UNIX 4.2BSD 内核版本中加入了 socket 的实现,此后,很多操作系统都提供了自己的 socket 接口实现。通过 socket 接口,我们就可以与不同地址...转载 2018-12-22 18:51:04 · 811 阅读 · 0 评论 -
Java NIO之选择器
1.简介前面的文章说了缓冲区,说了通道,本文就来说说 NIO 中另一个重要的实现,即选择器 Selector。在更早的文章中,我简述了几种 IO 模型。如果大家看过之前的文章,并动手写过代码的话。再看 Java 的选择器大概就会知道它是什么了,以及怎么用了。选择器是 Java 多路复用模型的一个实现,可以同时监控多个非阻塞套接字通道。示意图大致如下:如果大家了解过多路复用模型,那应该也...转载 2018-12-22 18:51:59 · 809 阅读 · 0 评论 -
基于 Java NIO 实现简单的 HTTP 服务器
1.简介本文是上一篇文章实践篇,在上一篇文章中,我分析了选择器 Selector 的原理。本篇文章,我们来说说 Selector 的应用,如标题所示,这里我基于 Java NIO 实现了一个简单的 HTTP 服务器。在接下来的章节中,我会详细讲解 HTTP 服务器实现的过程。另外,本文所对应的代码已经上传到 GitHub 上了,需要的自取,仓库地址为 toyhttpd。好了,废话不多说,进入正...转载 2018-12-22 18:53:02 · 1442 阅读 · 0 评论