摘要: 在Java SE 7 API中NIO相关库得到了扩充,新的NIO库被称为NIO 2.0,在这一版中Java提供了异步IO的能力,包括异步处理文件以及异步访问Socket数据。 异步的IO操作是IO模型的一种(关于IO模型,可以参考:[Java NIO预备知识:I/O底层原理与网络I/O模型](https://www.cnblogs.com/zjq-blog/p/15612494.html)),它采用的是一种“订阅-通知”模式。即应用程序线程向操作系统注册IO监听,当应用程序线程发出IO请求后便可以不在关心IO处理,内核进行系统调用,当数据准备好时进行接收数据,接收完毕后还会自行将数据写入用户地址空间。写入完毕之后由内核主动通知应用程序。因此,AIO是异步非阻塞的。 阅读全文
posted @ 2021-12-07 22:32 芝芝与梅梅 阅读(180) 评论(0) 推荐(0) 编辑
摘要: Java 8提供了一种新的API来处理数据序列,在这个API中可以将数据想象成一股数据流,流过管道,而管道中则有各种的“筛网”来对流中每个流过的数据进行处理。这些筛网就是相关的方法,该API总体是一种声明式的编程,即只需在编写代码时告知你要干什么(你要使用什么“筛网”)而无需自己编写迭代器或循环代码去对每个元素进行判断/处理。同时由于Java 8引入了lambda表达式和方法引用,使得可以用函数式编程的模式去将方法作为参数以处理流中的元素。总的来说,流与lambda表达式/方法引用的配合可以使对元素序列的复杂操作简单化,就像编写SQL一样,在实现逻辑代码时,你只需要关心要做什么就可以。 阅读全文
posted @ 2021-12-05 21:59 芝芝与梅梅 阅读(78) 评论(0) 推荐(0) 编辑
摘要: ###6.Pipe Pipe是一个单向的管道,可以作为Java在JVM进程的线程间通讯的工具。在使用时,通信的线程共享一个Pipe,消息的发送方使用sink()方法获得一个通道,由这个通道写入数据。消息的接收方使用source()方法获得一个通道,然后又这个通道接收数据。 Pipe pipe = P 阅读全文
posted @ 2021-12-02 18:54 芝芝与梅梅 阅读(70) 评论(0) 推荐(0) 编辑
摘要: ###4.四种Channel实现类 4.1 FileChannel FileChannel是一端连接硬盘文件的Channel,想要获得这个FileChannel可以使用open方法指定文件Path及读写选项操作打开或者通过InputStream、OutputStream或RandomAccessFi 阅读全文
posted @ 2021-11-30 15:34 芝芝与梅梅 阅读(81) 评论(0) 推荐(0) 编辑
摘要: ###1.什么是NIO? Java NIO(New IO)在Java 1.4被引入,该API可以实现与传统IO完全不同的机制。对于NIO来说,其主要提供了新的对网络的多路复用IO技术。在面向网络的数据传输中,如果含有连接数很多而每次传输的数据量不是很大,那么这个场景会更适合使用NIO技术。 注意,J 阅读全文
posted @ 2021-11-28 19:59 芝芝与梅梅 阅读(85) 评论(0) 推荐(0) 编辑
摘要: ###1.操作系统内存划分与缓存机制 首先,操作系统将虚拟内存(对物理内存的映射)划分为用户空间和内核空间,用户空间分配给应用程序,而系统的核心功能在内核空间中运行。这样的分隔可以保证用户程序出现问题(比如软件崩溃)不会影响到操作系统。 无论是使用Java传统的流I/O还是NIO,在传输数据时,都不 阅读全文
posted @ 2021-11-27 17:33 芝芝与梅梅 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 在Java中,Path类和Files类封装了在用户机器上处理文件系统所需的所用功能。这两个类在Java SE 7中被引入,组合这两个类操作文件、路径将比java第一个版本的File类要方便很多。 阅读全文
posted @ 2021-11-23 12:37 芝芝与梅梅 阅读(63) 评论(0) 推荐(0) 编辑
摘要: 在Java API中,读入或写出一个字节序列的对象分别叫做输入流与输出流,这些字节序列的来源和目的地可以是文件、网络结构与内存块,抽象类InputStream与OutputStream构成了输入/输出(I/O)类层次结构的基础。 面向字节的流不适合与处理Unicode形式存储的信息,所以从抽象类Reader和Writer中继承出来一个专用于处理Unicode字符的类层次结构,这些类操作针对与两个字节的Unicode代码单元(一个char的表示范围)而不是的单个字节。 阅读全文
posted @ 2021-11-22 15:25 芝芝与梅梅 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 上一节介绍的是Java一些偏底层的保护多线程并发和同步安全的构建与机制。而这一部分的内容将展示部分Java平台提供好的一些较高实现层次类库,比如阻塞队列、线程安全的集合类、线程池与任务组和Fork-Join框架等。使用这些类库可以简单的实现相应的具有线程安全的操作,而无需担心手动编写类似代码时出现的问题。 阅读全文
posted @ 2021-11-20 15:44 芝芝与梅梅 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 基于OOP的思想,Java将每个线程作为一个线程对象,每个线程对象相应的具有从创建到终止的整个生命周期状态。由于在多线程环境下各个线程的运行次序具有不确定性,为了保护该环境下程序运行结果的正确性,Java有着一套相应的并发和同步机制,包括使用到不同锁与条件对象、关键字、数据结构和语言机制等。同时为了实现平台无关性,JVM还定义了一套Java内存模型(JMM)以规定程序如何使用统一的方式在不同平台上读取内存中的变量。 阅读全文
posted @ 2021-11-19 16:10 芝芝与梅梅 阅读(85) 评论(0) 推荐(0) 编辑