Java Channel解析与实例
来源:互联网 发布:唐朝 阿拉伯 知乎 编辑:程序博客网 时间:2024/06/05 00:42
文件IO
FileChannel是处理文件IO中的核心Channel实现。FileChannel不能直接构建,只能通过FileInputStream,FileOutputStream,RandomAccessFile通过getChannel()获得FileChannel实例对象,获得的FileChannel对象的权限也由相关的File对象所限制,也就说说FileInputStream所获得的Channel对象只能使用read(),如果使用write(),则会相关异常。
FileChannel是线程安全的,多个现在可以共享一个FileChannel实例并发调用read,write而不会产生多线程问题。
在操作系统层面,一个FileChannel与一个文件描述符一一对应。操作系统内核通过文件描述符来访问文件,文件描述符是一个非负整数,打开或创建文件的时候,系统内核会返回一个文件描述符,读写文件也时需要文件描述符来指定待读写的文件。
内存映射文件
FileChannel可以通过map()方法得到MappedByteBuffer,这个方法在一个打开文件和一个特殊类型的ByteBuffer之间建立一个虚拟内存映射。这个类有两个关键的API,load()将虚拟内存直接转载到物理内存中;force()将修改后的Buffer写入带磁盘中。
由于批量传输在IO中频繁的出现,以普通IO的方式惊醒批量传输性能又不高,所以FileChannel为批量传输提供了高效的API,transferTo和transferFrom,需要将一个通道交叉到另外一个通道并且不通过缓存区。
文件IO总时阻塞的,因此不能设于非阻塞模式下(磁盘特性造成)。对于文件IO,最大的意思是异步IO,他可以使得一个线程处理多个IO的时候,可以不必等待IO的完成,而是使用异步的模式,在完成之后回调事件中执行相关的逻辑,当然如果需要阻塞等待的时候,也可以在异步的模式中声明等待完成,可以使用异步的Future。在Java7中,AIO被纳入了NIO的范畴内,这里的NIO的N不是非阻塞的意思,而时新的意思,即新IO。
- Java Channel解析与实例
- JAVA NIO的BufferByte与Channel DEMO实例
- Java NIO编程实例之二Channel
- Java DataInputStream与DataOutputStream 入门实例解析
- Java NIO Channel与Buffer的概述
- Java NIO Channel与Buffer的概述
- Java NIO 详解---Buffer与Channel
- ajax实例与解析
- Java解析Excel实例解析
- 解析Java中静态变量与实例变量的区别
- 解析Java中静态变量与实例变量的区别
- 解析Java中静态变量与实例变量的区别
- 解析Java中静态变量与实例变量的区别
- 解析Java中静态变量与实例变量的区别
- 解析Java中静态变量与实例变量的区别
- 解析Java中静态变量与实例变量的区别
- Java BufferedInputStream与BufferedOutputStream 入门版实例解析【文件操作】
- 解析Java中静态变量与实例变量的区别
- Lucene之八(Lucene的高亮显示)
- 设计模式_接口回调
- C#的诞生及与Java的比较
- iPhone4平台上实时音视频对话(经验)
- 开源 免费 java CMS - FreeCMS-功能说明-角色管理 .
- Java Channel解析与实例
- java设计模式——迭代器模式
- java 垃圾回收相关总结 【思维导图】
- 百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
- 命名规则
- Android之UI学习篇十二:ListView控件学习(二)
- java 类的初始化1
- 《高质量程序设计指南——C/C++》第14章 C++函数的高级特性
- cmyk图片转为rgb图片