Java NIO总结

Java NIO总结

ID:42623729

大小:67.54 KB

页数:16页

时间:2019-09-19

Java NIO总结_第1页
Java NIO总结_第2页
Java NIO总结_第3页
Java NIO总结_第4页
Java NIO总结_第5页
资源描述:

《Java NIO总结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、NIO:与外围设备数据通信需要channel通道,如像外部输出数据,先将数据写入缓冲区通过通道输出。如果从外部读取数据,需要通过通道channel读取到缓冲区,然后从缓冲区数据获取处理。缓冲区内部细节1初始化2第一次读取3个字节到缓冲区3第二次读取2个字节到缓冲区4调用Flip,将limit设置position,position设置为05调用clear,将limit设置为capacity,position设置为0NIO核心观念:通道和缓冲区(channel和Buffer)1)块操作2)非阻塞IO复用机制采用select模型,注册感兴趣IO事件给操作系统后,一旦这些事件发

2、生,内核会改变这些事件的状态,通过检查这些事件的状态,便可以查找到注册过的、准备就绪的I/O事件,然后可以流畅地进行I/O操作。传统IO阻塞调用:流I/O是阻塞调用的。不论是read方法还是write方法都能阻塞(block)一个线程直到字节被真正地读取或者写入。这意味着如果流不能立即被读取或者写入字节(通常是因为网络连接繁忙),Java就会挂起这个调用的线程,处于等待的状态。常用Socket的读写操作都是阻塞式的,就是说每次read/write掉用,在数据被读入/写出前,调用线程都处于阻塞的状态.多线程耗费资源,特别是多线程间切换很耗费资源。NIO特征:l)面向块的I

3、/O操作2)非阻塞的I/O操作3)字符集编码解码4)内存映射文件5)文件锁定,Reactor模型:Reactor模型采用分而治之的思想,将一个客户端连接的事件分成两类:I/O事件和非I/O事件。前者需要等待I/O准备就绪,后者可以立即执行,因此分别进行处理。I/O事件包括:Read(读取请求信息)、Send(发送响应信息)。非I/O事件包括encode、compute、decode。异步连接池:首先,用户处理线程调用连接池对象的某个方法(比如sendRequest),把一个能够标识本次请求的Request对象扔给连接池。之后用户处理线程可以去做别的事情,比如,向其他连接

4、池发送请求。最后当用户线程处理完能做的业务逻辑后,就可以等待连接池返回结果了。(一)读写IO:(按块缓冲区)packagejava.nio.io;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.nio.ByteBuffer;importjava.nio.MappedByteBuffer;importjava.nio.channels.FileChannel;importjava.util.Date;/***@Project:

5、NIO*@Title:CopyFile.java*@Package*@Description:JAVANIO读取写入文件方面优势*@authorpaul.wei2011@gmail.com*@dateMay16,20139:51:13AM*@versionV1.0*///传统IO一直是性能瓶颈,因为每次按字节读取,耗费磁头寻址次数,磁头寻址时间是固定的,次数多耗费时间就长publicclassCopyFile{publicstaticvoidmain(String[]args)throwsException{Stringinfile="C:\copy.sql";Str

6、ingoutfile="C:\copy.txt";//获取源文件和目标文件的输入输出流FileInputStreamfin=newFileInputStream(infile);FileOutputStreamfout=newFileOutputStream(outfile);//获取输入输出通道FileChannelfcin=fin.getChannel();//FileChannel对象是线程安全的FileChannelfcout=fout.getChannel();//每个FileChannel都有一个叫'fileposition'的概念,该position值决

7、定文件中哪一处的数据接下来被读或写。//FileChannelposition是从底层文件描述符获取的,当字节被read()或write()方法传输时,文件position会自动更新。//MappedByteBuffer类使得我们可以通过ByteBufferAPI来访问数据文件byteBuffer(fcin,fcout);//2秒mapByteBuffer(fcin,fcout);//1秒}//创建缓冲区publicstaticvoidbyteBuffer(FileChannelfcin,FileChannelfcout)throwsIO

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。