文档章节

Netty进阶基础篇之流概念篇(1)

木九天
 木九天
发布于 07/13 22:46
字数 1309
阅读 35
收藏 2

序言:学Netty之前,对流的概念应该深刻一些,所以先理解一下流的使用!

1、IO、NIO、AIO 含义区别

1.1 同步阻塞I/O(BIO block io)

jdk1.4之前就一个io流,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制来改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务端资源要求比较高,并发局限于应用中。

1.2 同步非阻塞I/O(NIO)

Java NIO(New IO)是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API。 NIO与原来的IO有同样的作用和目的,但是使用 的方式完全不同,NIO支持面向缓冲区的、基于 通道的IO操作。NIO将以更加高效的方式进行文 件的读写操作。

1.3 异步非阻塞I/O(AIO)

异步非阻塞I/O,服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由操作系统先完成了再通知服务器用其启动线程进行处理。AIO方式适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,jdk1.7开始支持。

1.4 同步与异步的区别

同步:一个人只能先上完小学才能上初中,上完初中才能上高中,最后才可以大学,一步一步来,这是同步。

异步:一个人可以一边听歌,也可以一边玩游戏,两种动作可以同时进行

1.5 NIO与IO的区别

2、NIO的核心

client(客户端)和server(服务端),把数据client传送到server,或者server传送到client,就相当于怎么上海火车站的人群运输到北京火车站,或者北京车站运输到上海火车站。

channel相当于:北京上海之间的铁轨

buffer相当于:火车(可以有多个型号的火车)

2.1 Buffer(缓冲区)

在Java NIO中负责数据的存取,缓冲区就是数组,用于存储不同数据类型的数据,根据数据类型不同,提供了响应类型的缓冲区:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,通过 allocate() 获取缓冲区。

2.2 Channel(通道)

Channel类似于传送的流,只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互

简而言之,Channel 负责传输, Buffer 负责存储

接下来的几片博客,将详细分别讲述Buffer、Channel的用法。

3、Path 与 Paths

3.1 Path

Pathjava.nio.file.Path 接口代表一个平台无关的平台路径,描述了目录结构中文件的位置。

Path常用方法:

Path常用方法
booleanendsWith(Stringpath) 判断是否以path路径结束
booleanstartsWith(Stringpath) 判断是否以path路径开始
boolean isAbsolute() 判断是否是绝对路径
PathgetFileName() 返回与调用Path对象关联的文件名
Path getName(int idx) 返回的指定索引位置 idx 的路径名称
intgetNameCount() 返回Path根目录后面元素的数量
PathgetParent() 返回Path对象包含整个路径,不包含Path对象指定的文件路径
PathgetRoot() 返回调用Path对象的根路径
Path resolve(Path p) 将相对路径解析为绝对路径
PathtoAbsolutePath() 作为绝对路径返回调用Path对象
StringtoString() 返回调用Path对象的字符串表示形式
   

3.2 Paths

java.nio.file.Files 用于操作文件或目录的工具类。

Files常用方法

方法 描述
Path get(String first, String ... more) Paths提供的get()方法用来获取Path对象,用于将多个字符串串连成路径
Path copy(Path src, Path dest, CopyOption ... how) 文件的复制
Path createDirectory(Path path, FileAttribute<?> ... attr) 创建一个目录
Path createFile(Path path, FileAttribute<?> ... arr) 创建一个文件
void delete(Path path) 删除一个文件
Path move(Path src, Path dest, CopyOption...how) 将 src 移动到 dest 位置  long size(Path path) : 返回 path 指定文件的大小
boolean exists(Path path, LinkOption ... opts) 判断文件是否存在
boolean isDirectory(Path path, LinkOption ... opts) 判断是否是目录
boolean isExecutable(Path path) 判断是否是可执行文件
boolean isHidden(Path path) 判断是否是隐藏文件
boolean isReadable(Path path) 判断文件是否可读
boolean isWritable(Path path) 判断文件是否可写
 boolean notExists(Path path, LinkOption ... opts) 判断文件是否不存在

 

Files操作内容方法
SeekableByteChannel newByteChannel(Path path, OpenOption...how)

获取与指定文件的连接,how 指定打开方式。

DirectoryStream newDirectoryStream(Path path) 打开 path 指定的目录
InputStream newInputStream(Path path, OpenOption...how) 获取 InputStream 对象
OutputStream newOutputStream(Path path, OpenOption...how) 获取 OutputStream 对象

 

© 著作权归作者所有

木九天

木九天

粉丝 189
博文 224
码字总数 171159
作品 0
海淀
程序员
私信 提问
Dart语法进阶篇(一)-- Dart源码的排序算法详解

版权声明:本文为博主原创文章,未经博主允许不得转载。https://www.jianshu.com/p/44ae73a58ebc 转载请标明出处: https://www.jianshu.com/p/44ae73a58ebc 本文出自 AWeiLoveAndroid的博客...

AWeiLoveAndroid
07/04
0
0
dubbo专题-服务暴露总结(本地暴露+远程暴露时序图)

  点击上方“java进阶架构师”,选择右上角“置顶公众号”   20大进阶架构专题每日送达   本篇是服务暴露的最后一篇,从第一篇服务暴露原理到现在,已经超过一个月,本篇是总结篇,将用画图...

java进阶架构师
2018/09/20
0
0
Flutter进阶篇(6)-- PageStorageKey、PageStorageBucket和PageStorage使用详解

如果你想从一个页面进入另一个页面,返回时还是保留着跳转前的最后的状态,也许你第一个想的是用Key去实现,但是那么有点麻烦,很多人的都不知道如何下手。今天我查找源码,发现了一个PageS...

AWeiLoveAndroid
07/10
0
0
Flutter基础篇(8)-- Flutter for Web详细介绍

本文版权归作者AWeiLoveAndroid所有,未经授权,严禁私自转载。转载请声明原文链接和作者信息。 最近谷歌搞了一件大事情,Flutter也可以写Web应用了,去年我用Dart写了一下Web,请看视频介绍...

AWeiLoveAndroid
05/10
0
0
小册上新:Taro 多端开发实现原理与项目实战

学习一门技术的最好方法,就是在实践中使用它。 Taro 也是如此。Taro 是由京东凹凸实验室打造的一套遵循 React 语法规范的多端统一开发框架。他们为此专门撰写了一本小册子,主要介绍从 0 到...

小册姐
2018/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

无回路有向图的拓扑排序

因公司业务需要,在表单中每个字段都会配置自动计算,但自动计算公式中会引用到其他字段中的值。所以希望可以根据计算公式,优先计算引用的公式。所以最终使用了无回路有向图的扩扑排序来实现...

兜兜毛毛
今天
6
0
如何抢占云栖大会C位?史上最强强强攻略来了

点击观看视频: APSARA云栖大会开发者情怀 原文链接 本文为云栖社区原创内容,未经允许不得转载。

阿里云官方博客
今天
6
0
Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现

作者 | 声东 阿里云售后技术专家 文章来源:Docker,点击查看原文。 以我的经验来讲,理解 Kubernetes 集群服务的概念,是比较不容易的一件事情。尤其是当我们基于似是而非的理解,去排查服务...

阿里巴巴云原生
今天
11
0
PHP7.3的新特性

2018年12月6日,PHP7.3正式版发布,在PHP7.2基础上进行了大量错误修复和安全优化,性能提升10%! 从目前的更新说明来看,PHP 7.3 并不是一个主打新特性的版本,包含更多的是 bug 修复。PHP 7...

迅睿CMS-PHP开源CMS程序
今天
8
0
Tomcat 应用中并行流带来的类加载问题

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/f-X3n9cvDyU5f5NYH6mhxQ 作者:肖铭轩、王道环 随着 Java8 的不断流行,越来越多的开发人员使用并行流(parallel)...

vivo互联网技术
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部