Java NIO-06-Selector
Selector
概念
Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读、可写。
如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。
作用
用单线程处理多个channels的好处是我需要更少的线程来处理channel。
实际上,你甚至可以用一个线程来处理所有的channels。从操作系统的角度来看,切...
2018-09-22 04:20:47 |
Java
Java NIO-05-Buffer
Buffer
作用
Java NIO Buffers用于和NIO Channel交互。正如你已经知道的,我们从channel中读取数据到buffers里,从buffer把数据写入到channels.
buffer 本质上就是一块内存区,可以用来写入数据,并在稍后读取出来。
这块内存被NIO Buffer包裹起来,对外提供一系列的读写方便开发的接口。
用法演示
Basic Buff...
2018-09-22 04:20:47 |
Java
Java NIO-04-Channel
Channel
vs 流
Java NIO Channel通道和流非常相似,主要有以下几点区别:
通道可以读也可以写,流一般来说是单向的(只能读或者写)。
通道可以异步读写。
通道总是基于缓冲区Buffer来读写。
实现
Channel 的实现(Channel Implementations)
下面列出Java NI...
2018-09-22 04:20:47 |
Java
Java NIO-03-Charsets
Standard charsets
Java 暂时支持如下的标准编码
US-ASCII: 7位ASCII字符。
ISO-8859-1: ISO拉丁字母
UTF-8:这是8位UCS转换格式。
UTF-16BE:这是16位UCS转换格式,字节顺序大
UTF-16LE:这是16位UCS变换,以字节顺...
2018-09-22 03:20:47 |
Java
Java NIO-02-Path/Files
Path
我接触到 nio,最先的应用就是 Path 这个类。
最直观的感觉就是 api 设计的很优雅(相对于传统的 File)。
Path 类
Java的path接口是作为Java NIO 2的一部分是Java6,7中NIO的升级增加部分。
Path在Java 7新增的。
相关接口位于java.nio.file包下,所以Javaz内Path接口的完整名称是 java.nio.f...
2018-09-22 01:20:47 |
Java
Java NIO-01-Overview
NIO
是什么
Java NIO是java 1.4之后新出的一套IO接口,这里的的新是相对于原有标准的Java IO和Java Networking接口。NIO提供了一种完全不同的操作方式。
作用
Java NIO使我们可以进行非阻塞IO操作。
比如说,单线程中从通道读取数据到buffer,同时可以继续做别的事情,当数据读取到buffer中后,线程再继续处理数据。写数据也是一样的。...
2018-09-22 01:18:47 |
Java
Java IO-09-文件内存泄漏 memory leak
什么是内存泄露
定义:当生命周期长的实例 L 不合理地持有一个生命周期短的实例 S,导致 S 实例无法被正常回收
代码例子
public class AppSettings {
private Context mAppContext;
private static AppSettings sInstance = new AppSettings();
//som...
2018-09-21 09:36:38 |
Java
Java IO-08-MMAP 内存映射 Channel
需求
通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作。
与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动。
通道既可以读,也可以写。
这里我们举个例子说明一下,我们可以把通道看做水管,把缓存看做水塔,把文件看做水库,把水看做数据。
当从磁盘中将文件数据读取到缓存中时,就是从水库向水塔里抽水。
当然,从磁...
2018-09-21 09:36:38 |
Java