`
wakin2003
  • 浏览: 67436 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Java nio(一)

阅读更多
jdk1.4提供了java.nio包,为从根本上改善I/O的性能提供了可能,但是nio要比以前的I/O要复杂,提供了更底层的操作和更细的api。学起来并不是那么快就上手,有专门一本书
介绍nio的。我希望通过总结更好的梳理整个nio框架各个类之间的关系,从而能够灵活的使用nio包。
nio通常需要涉及到三个对象:
1、数据源:从文件中获得的FileInputStream/FileOutputStream、从socket中获得的输入输出流等
2、缓冲区对象(buffer):nio定义了一系列buffer对象,最基本的是ByteBuffer,其他还有各种基本数据类型除了boolean类型外,所对应的buffer类型。使用这些buffer一般的过程是:从数据源中读到ByteBuffer中,然后使用ByteBuffer.asXxxBuffer()转换成特定的基本类型,然后对这个基本类型的buffer进行操作;把基本类型转换成ByteBuffer类型,然后写入数据源中。
3、通道对象(channel):他提供了对数据源的一个连接,可以从文件中获得FileChannel,从Socket中获得SocketChannel,它是一个中介。提供了数据源与缓冲区之间的读写操作。
我们可以同过一句话来解释他们三者之间的关系:
channel对象提供了数据源与缓冲区之间的读写操作,是数据源与缓冲区的一个桥梁,通过这个桥梁,数据在两者之间流动。
首先我们看看这个中介Channel类的整个结构:
Channel < Closable   
WritableByteChannel < Channel   
InterruptibleChannel < Channel   
ReadableByteChannel < Channel   
GetherByteChannel < WritableByteChannel    
ByteChannel < WritableByteChannel,ReadableByteChannel    
ScatteringByteChannel < ReadableByteChannel   

Channel接口声明了两个方法:
close(),用来关闭通道
isOpen(),用于测试通道是否打开
其他的通道:
ByteChannel只是简单的合并了WritableByteChannel和ReadableChannel的,ScatteringByteChannel接口扩展了ReadableChannel接口,添加了一个读取并将数据
分布在不同缓冲区的方法,而GatheringByteChannel接口在WritableByteChannel的基础上添加了将多个独立的缓冲区写入驱动器中的方法。
Closeable:   
void close()//关闭源或目的地,并释放资源   
Channel:   
void close()//关闭通道   
void boolean isOpen()//判断通道是否打开   
ReadableByteChannel:   
int read(ByteBuffer input)   
//将字节从通道读入input缓冲区中,返回读取的字节数,到达流结尾时,返回-1   
WritableByteChannel:   
int write(ByteBuffer output)   
//将字节从实参output缓冲区写入通道,返回写的字节数   
ByteChannel 仅仅继承了ReadableByteChannel和WritableByteChannel的方法   
ScatteringByteChannel:   
int read(ByteBuffer[] inputs)   
//将字节从通道读入inputs缓冲区数组中,返回读取的字节,到达流末尾是,返回-1   
int read(ByteBuffer[] inputs,int offset,int length)   
//将字节从通道读inputs[offset]---inputs[offeset+length-1]缓冲区中   
GatherByteChannel:   
int write(ByteBuffer[] outputs);   
//把outputs缓存区数组写入通道中   
int write(ByteBuffer[] outputs,int offset,int length);   
把从outputs[offset]-->outputs[offset+length-1]缓冲区写入通道中  

例子:(我们忽略了各种Exception)
File file = new File("C:\\test.txt");   
FileOutputStream fos = new FileOutputStream(file);   
FileChannel outputChannel = fos.getChannel();   
String str = "Hello,just a test";   
ByteBuffer bb = ByteBuffer.wrap(str.getBytes());   
outputChannel.write(bb);  

先总结到这,下次总结各种Buffer及其操作。
分享到:
评论

相关推荐

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    Java NIO英文高清原版

    Java NIO英文高清原版

    java nio 包读取超大数据文件

    Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...

    java NIO.zip

    java NIO.zip

    java NIO 中文版

    讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用

    java NIO 视频教程

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,...

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    java nio 实现socket

    java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket

    java nio中文版

    java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持...

    Java Nio selector例程

    java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...

    Java NIO系列教程(一) Java NIO 概述

    Java NIO系列教程(一) Java NIO 概述

    java nio 读文件

    java nio 读文件,java nio 读文件

    java NIO技巧及原理

    java NIO技巧及原理解析,java IO原理,NIO框架分析,性能比较

    java基于NIO实现Reactor模型源码.zip

    java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...

    JAVA NIO 学习资料

    JAVA NIO学习资料JAVA NIO学习资料

    基于Java NIO实现五子棋游戏.zip

    基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现...

    Java NIO测试示例

    Java NIO测试示例

    一个java NIO的例子

    一个java NIO的例子 有很详细的每一步的描述,很好去理解

    Java NIO.pdf

    java nio编程 非阻塞模式的通信 电子书 带目录标签

Global site tag (gtag.js) - Google Analytics