java nio简介.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1.???基本?概念 IO?是主存和外部设备?(?硬盘、终端和网络等?)?拷贝数据的过程。?IO?是操作系统的底层功能实现,底层通过?I/O?指令进行完成。 所有语言运行时系统提供执行?I/O?较高级别的工具。?(c?的?printf scanf,java?的面向对象封装?) 2.????Java?标准?io?回顾 Java?标准?IO?类库是?io?面向对象的一种抽象。基于本地方法的底层实现,我们无须关注底层实现。InputStream\OutputStream(?字节流?)?:一次传送一个字节。?Reader\Writer(?字符流?)?:一次一个字符。 3.????nio?简介 nio?是?java New IO?的简称,在?jdk1.4?里提供的新?api?。?Sun?官方标榜的特性如下: –?????为所有的原始类型提供?(Buffer)?缓存支持。 –?????字符集编码解码解决方案。 –?????Channel?:一个新的原始?I/O?抽象。 –?????支持锁和内存映射文件的文件访问接口。 –?????提供多路?(non-bloking)?非阻塞式的高伸缩性网络?I/O?。 本文将围绕这几个特性进行学习和介绍。 4.???BufferChanel Channel?和?buffer?是?NIO?是两个最基本的数据类型抽象。 Buffer: –????????是一块连续的内存块。 –????????是?NIO?数据读或写的中转地。 Channel: –????????数据的源头或者数据的目的地 –????????用于向?buffer?提供数据或者读取?buffer?数据?,buffer?对象的唯一接口。 –?????????异步?I/O?支持 图1:channel和buffer关系 ? ? 例子?1:CopyFile.java: Java代码?? package?sample;?? ?? import?java.io.FileInputStream;?? import?java.io.FileOutputStream;?? import?java.nio.ByteBuffer;?? import?java.nio.channels.FileChannel;?? ?? 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);?? ????????}?? ????}?? }?? ? 其中?buffer?内部结构如下?(?下图拷贝自资料?): 图2:buffer内部结构? 一个?buffer?主要

文档评论(0)

82393aa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档