本篇内容介绍了“Netty中流基础知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、同步阻塞I/O(BIO block io)
jdk1.4之前就一个io流,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进 行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制来改善。BIO方式适用于连接数目比较 小且固定的架构,这种方式对服务端资源要求比较高,并发局限于应用中。
二、 同步非阻塞I/O(NIO)
Java NIO(New IO)是从Java 1.4版本开始引入的 一个新的IO API,可以替代标准的Java IO API。 NIO与原来 的IO有同样的作用和目的,但是使用 的方式完全不同,NIO支持面向缓冲区的、基于 通道的IO操作。NIO将以更加高效的方 式进行文 件的读写操作。
三、异步非阻塞I/O(AIO)
异步非阻塞I/O,服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由操作系统先完成了再通知服务器用其 启动线程进行处理。AIO方式适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作, 编程比较复杂,jdk1.7开始支持。
四、同步与异步的区别
同步:一个人只能先上完小学才能上初中,上完初中才能上高中,最后才可以大学,一步一步来,这是同步。异步:一个人可以一边听歌,也可以一边玩游戏,两种动作可以同时进行
五、NIO与IO的区别
1、定义
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 负责存储。
一、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对象的字符串表示形式 |
二、Paths
java.nio.file.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 对象 |
1、读取
@Test public void readeFile() { FileInputStream input = null; String result = ""; try { //1.根据path实例化一个输入流的对象 input = new FileInputStream("/Users/tentsuuhou/Desktop/潜台词.txt"); //2.返回这个输入流中可以被读的剩下的bytes字节的估计值; int size = input.available(); //3.根据输入流的字节创建一个byte数组 byte[] array = new byte[size]; //4.把数据读取到byte数组中 input.read(array); //5.根据获取的byte数组新建一个字符串,然后输出 result = new String(array); System.out.println(result); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(input != null){ try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } }
2、写入
@Test public void writeFile() { FileOutputStream out = null; String content = "我爱开源中国"; try { //1.根据路径创建输出流对象 out = new FileOutputStream("/Users/tentsuuhou/Desktop/777.txt") ; //2.把String字符串转换成byte数组; byte[] b = content.getBytes(); //3.把byte数组输出 out.write(b); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
“Netty中流基础知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。