序言:学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常用方法:
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 对象 |
转载于:https://my.oschina.net/mdxlcj/blog/3073844
分享到:
相关推荐
Java进阶技术-netty进阶之路
Netty进阶之路 跟着案例学Netty 整本书无密码,Netty进阶之路 跟着案例学Netty
《Netty进阶之路-跟着案例学Netty》是由知名技术专家李林峰撰写的一本专为Java开发者深入理解Netty框架而准备的书籍。这本书旨在通过实例教学,帮助读者全面掌握Netty的核心特性和实战技巧,提升网络编程的能力。 ...
《Netty进阶之路:跟着案例学Netty》中的案例涵盖了Netty的启动和停止、内存、并发多线程、性能、可靠性、安全等方面,囊括了Netty绝大多数常用的功能及容易让人犯错的地方。在案例的分析过程中,还穿插讲解了Netty...
精选自1000多个一线业务实际案例,从原理到实践全景式讲解Netty项目实践,快速领悟Netty专家花大量时间积累的经验,提高编程水平及分析解决问题的能力,《Netty木又威指南》作者力作,众专家力荐 Netty将Java NIO...
在《Netty进阶之路:跟着案例学Netty》中,作者将在过去几年实践中遇到的问题,以及Netty学习者咨询的相关问题,进行了归纳和总结,以问题案例做牵引,通过对案例进行剖析,讲解问题背后的原理,并结合Netty源码分析...
读书笔记:《Netty进阶之路跟着案例学Netty》
《Netty进阶之路+跟着案例学Netty》是由李林锋著的一本关于Java网络编程框架Netty的专业书籍。Netty是一个基于Java NIO(非阻塞I/O)的高性能、异步事件驱动的网络应用程序框架,广泛应用于各类Java项目,尤其是需要...
在《Netty进阶之路:跟着案例学Netty》中,作者将在过去几年实践中遇到的问题,以及Netty学习者咨询的相关问题,进行了归纳和总结,以问题案例做牵引,通过对案例进行剖析,讲解问题背后的原理,并结合Netty源码分析...
【笔记,3、Netty进阶和实战1】 在IT领域,Netty是一个高性能、异步事件驱动的网络应用程序框架,常用于开发高效的网络服务。本篇笔记将深入探讨Netty在UDP协议上的应用,包括单播和广播的实现,以及服务器推送技术...
【Netty进阶和实战2】笔记主要涵盖了UDP协议、Netty框架中UDP的实现以及服务器推送技术。UDP,即用户数据报协议,是一种无连接的、不可靠的传输协议,适用于那些能处理或容忍数据丢失但需要快速传输的应用场景。在...
netty案例,netty4.1中级拓展篇十一《Netty基于ChunkedStream数据流切块传输》源码 ...
1. **Netty基础架构**: Netty采用了Reactor模式,它是一种处理并发I/O事件的设计模式,主要由Selector(选择器)、ServerBootstrap(引导类)和Channel(通道)等组件构成。在这个案例中,你会看到ServerBootstrap...
netty案例,netty4.1基础入门篇六《NettyServer群发消息》源码 https://mp.weixin.qq.com/s?__biz=MzIxMDAwMDAxMw==&mid=2650724778&idx=1&sn=72e4b1ea5323475b16e99c6720c7069d&scene=19#wechat_redirect
在深入探讨Netty之前,我们先来理解一些基础概念。 1. **ByteBuf**: ByteBuf是Netty中用于处理网络数据传输的核心类,它是一个高效且灵活的字节缓冲区。ByteBuf提供了读写操作,可以动态扩展或收缩容量,以适应不同...
近百节视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程内容: 一.... Netty 进阶 1. 粘包与半包 2. 协议设计与解析 3. 聊天室案例 四. 优化与源码 1. 优化 2. 源码分析
这个基础文档将带你从入门到进阶,深入理解Netty的核心概念和应用。 1. **入门理解** - **什么是Netty?** Netty是由JBOSS提供的一个Java开源框架,主要用于开发高并发、低延迟的网络应用,如TCP、UDP、HTTP、...
netty案例,netty4.1基础入门篇七《嗨!NettyClient》源码 https://mp.weixin.qq.com/s?__biz=MzIxMDAwMDAxMw==&mid=2650724783&idx=1&sn=bc827e680ebd533fe67720fd695257be&scene=19#wechat_redirect
netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》源码 https://mp.weixin.qq.com/s?__biz=MzIxMDAwMDAxMw==&mid=2650724927&idx=1&sn=a16bc8e98d6a27816da0896adcc83778&scene=19#wechat_redirect
netty案例,netty4.1中级拓展篇十二《Netty流量整形数据流速率控制分析与实战》源码 https://mp.weixin.qq.com/mp/homepage?__biz=MzIxMDAwMDAxMw==&hid=6&sn=d9bbd1e54719c7dce584c34347c12f71