欢迎来到天天文库
浏览记录
ID:34417048
大小:298.02 KB
页数:21页
时间:2019-03-05
《javanio与io的区别和比较》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、JavaNIO与IO的区别和比较1.基本概念IO是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。所有语言运行时系统提供执行I/O较高级别的工具。(c的printfscanf,java的面向对象封装)2.Java标准io回顾Java标准IO类库是io面向对象的一种抽象。基于本地方法的底层实现,我们无须关注底层实现。InputStreamOutputStream(字节流):一次传送一个字节。ReaderWriter(字符流):一次一个字符。3.nio简介n
2、io是javaNewIO的简称,在jdk1.4里提供的新api。Sun官方标榜的特性如下:–为所有的原始类型提供(Buffer)缓存支持。–字符集编码解码解决方案。–Channel:一个新的原始I/O抽象。–支持锁和内存映射文件的文件访问接口。–提供多路(non-bloking)非阻塞式的高伸缩性网络I/O。本文将围绕这几个特性进行学习和介绍。4.Buffer&ChanelChannel和buffer是NIO是两个最基本的数据类型抽象。Buffer:–是一块连续的内存块。–是NIO数据读或写的中转地。Channel:–
3、数据的源头或者数据的目的地–用于向buffer提供数据或者读取buffer数据,buffer对象的唯一接口。–异步I/O支持图1:channel和buffer关系例子1:CopyFile.java:Java代码1packagesample;23importjava.io.FileInputStream;4importjava.io.FileOutputStream;5importjava.nio.ByteBuffer;6importjava.nio.channels.FileChannel;78publicclassC
4、opyFile{1publicstaticvoidmain(String[]args)throwsException{2Stringinfile="C:\copy.sql";3Stringoutfile="C:\copy.txt";4//获取源文件和目标文件的输入输出流5FileInputStreamfin=newFileInputStream(infile);6FileOutputStreamfout=newFileOutputStream(outfile);7//获取输入输出通道8FileChannelfcin
5、=fin.getChannel();9FileChannelfcout=fout.getChannel();10//创建缓冲区11ByteBufferbuffer=ByteBuffer.allocate(1024);12while(true){13//clear方法重设缓冲区,使它可以接受读入的数据14buffer.clear();15//从输入通道中将数据读到缓冲区16intr=fcin.read(buffer);17//read方法返回读取的字节数,可能为零,如果该通道已到达流的末尾,则返回-118if(r==-1
6、){19break;20}21//flip方法让缓冲区可以将新读入的数据写入另一个通道1buffer.flip();2//从输出通道中将数据写入缓冲区3fcout.write(buffer);4}5}6}其中buffer内部结构如下(下图拷贝自资料):图2:buffer内部结构一个buffer主要由position,limit,capacity三个变量来控制读写的过程。此三个变量的含义见如下表格:参数写模式读模式position当前写入的单位数据数量。当前读取的单位数据位置。limit代表最多能写多少单位数据和容量是一
7、样的。代表最多能读多少单位数据,和之前写入的单位数据量一致。capacitybuffer容量buffer容量Buffer常见方法:flip():写模式转换成读模式rewind():将position重置为0,一般用于重复读。clear():清空buffer,准备再次被写入(position变成0,limit变成capacity)。compact():将未读取的数据拷贝到buffer的头部位。mark()、reset():mark可以标记一个位置,reset可以重置到该位置。Buffer常见类型:ByteBuffer、M
8、appedByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer。channel常见类型:FileChannel、DatagramChannel(UDP)、SocketChannel(TCP)、ServerSocketChann
此文档下载收益归作者所有