博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java NIO
阅读量:6814 次
发布时间:2019-06-26

本文共 1958 字,大约阅读时间需要 6 分钟。

特点:

为所有的原始类型提供 (Buffer) 缓存支持。

字符集编码解码解决方案。

Channel :一个新的原始 I/O 抽象。

支持锁和内存映射文件的文件访问接口。

提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 。

 

一个 buffer 主要由 position,limit,capacity 三个变量来控制读写的过程

参数

写模式    

读模式

position

当前写入的单位数据数量。

当前读取的单位数据位置。

limit

代表最多能写多少单位数据和容量是一样的。

代表最多能读多少单位数据,和之前写入的单位数据量一致。

capacity

buffer 容量

buffer 容量

 

Buffer 常见方法:

flip():

 limit 设为当前 position ,把 position 设为 0 ,一般在从 Buffer 读出数据前调用。

rewind() :将 position 重置为 0 ,一般用于重复读。

clear() :一般在把数据写入 Buffer 前调用 ,准备再次被写入 (position 变成 0 , limit 变成 capacity) 。

compact(): 将未读取的数据拷贝到 buffer 的头部位。

mark() 、 reset():mark 可以标记一个位置, reset 可以重置到该位置。

Buffer 对象有可能是只读的,这时,任何对该对象的写操作都会触发一个 ReadOnlyBufferException。isReadOnly() 方法可以用来判断一个 Buffer 是否只读。

 

Buffer 常见类型:

ByteBuffer、MappedByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer 

 

ByteBuffer wrap(byte [] array)

ByteBuffer wrap(byte [] array, int offset, int length)

把一个 byte 数组或 byte 数组的一部分包装成 ByteBuffer 。

 

Channel 常见类型:FileChannel、DatagramChannel(UDP)、SocketChannel(TCP)、ServerSocketChannel(TCP)

public class CopyFile {    public static void main(String[] args) throws Exception {        String infile = "C:\\copy.sql";        String outfile = "C:\\copy.txt";        // 获取源文件和目标文件的输入输出流        FileInputStream fin = new FileInputStream(infile);        FileOutputStream fout = new FileOutputStream(outfile);        // 获取输入输出通道        FileChannel fcin = fin.getChannel();        FileChannel fcout = fout.getChannel();        // 创建缓冲区        ByteBuffer buffer = ByteBuffer.allocate(1024);        while (true) {            // clear方法重设缓冲区,使它可以接受读入的数据            buffer.clear();            // 从输入通道中将数据读到缓冲区            int r = fcin.read(buffer);            // read方法返回读取的字节数,可能为零,如果该通道已到达流的末尾,则返回-1            if (r == -1) {                break;            }            // flip方法让缓冲区可以将新读入的数据写入另一个通道            buffer.flip();            // 从缓冲区写入输入通道中            fcout.write(buffer);        }    }}

转载于:https://www.cnblogs.com/liyuejiao/p/4257128.html

你可能感兴趣的文章
我的友情链接
查看>>
有一种感情, 不叫爱情
查看>>
液晶屏幕清洗千万不要做的三种方法
查看>>
HttpServletRequest cannot be resolved to a type
查看>>
myBtatis --开篇
查看>>
oracle监听 listener的设置
查看>>
Mysql 主从复制 及 一些要注意的特殊设置
查看>>
缺陷修改引起问题的思考
查看>>
构建基于Nginx的web服务器
查看>>
5 Servlet
查看>>
百度创始人李彦宏:要做最好的中文搜索引擎
查看>>
3.26作业
查看>>
Python里的append和extend
查看>>
cut命令
查看>>
JavaScript强化教程-cookie对象
查看>>
MEMCACHE常用的命令
查看>>
docker 基础
查看>>
Angular基础(七) HTTP & Routing
查看>>
使用Freeline提高你的工作效率
查看>>
FTP服务器
查看>>