java输入输出-(数据库技术-安全技术-).pptVIP

java输入输出-(数据库技术-安全技术-).ppt

  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文档。上传文档
查看更多
2. 源程序 //程序文件名为UseFchannel.java import java.io.*; import java.nio.*; import java.nio.channels.*; import java.nio.charset.*; class UseFchannel { public static void main(String[] args) { try { String filename = f.txt; FileInputStream input = new FileInputStream(filename); FileChannel channel = input.getChannel(); int fileLength = (int)channel.size(); MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, fileLength); Charset charset = Charset.forName(ISO-8859-1);// CharsetDecoder decoder = charset.newDecoder(); CharBuffer charBuffer = decoder.decode(buffer); System.out.println(charBuffer); } catch(Exception e) { System.out.println(Error: + e.getMessage()); } } } 3. 结果分析 图12.5上一部分显示打开的文件内容,下一部分显示程序输出的内容,可以看出两者是一致的。 图12.5 源文件内容与程序输出的内容对比 12.6.4 Selectors 非阻塞I/O围绕为多元选择通道准备的Selectors(选择器)对象构建。选择器对象保持一系列选择键,这些键在应用中可由某个事件激活。选择器本身管理键,编程人员使用键的状态管理回调来完成客户请求。 构造函数如下: protected Selector() 初始化一个实例。 选择器可以通过调用自带的open方法进行创建: Selector s = Selector.open(); 下面的两个方法用来返回选择键值的个数和键值集合。 public abstract int select() throws IOException 返回键值的个数。 public abstract Set selectedKeys() 返回选择器选中的键值集合。 对于一个Socket通道,只有将它本身发生的事件(如监听、连接、读、写等)在选择器上进行注册,才可以被选择器识别,从而进行处理,这个注册就用到SelectionKey类。SelectionKey类包括四个注册值,将通道支持的事件注册到相应的选择器上。它还提供四个判断键值状态的方法,从而进行相应的事件处理,如表12.3所示。 表12.3 SelectionKey类的注册值及其方法 例如,接收新连接的通道应该注册为: ServerSocketChannel ch = ServerSocketChannel.open(); SelectionKey acceptKey = ch.register(s,SelectionKey.OP_ACCEPT); 一个读取和写入数据的通道应该注册为: SelectionKey readWriteKey = ch.register(s,SelectionKey.OP_READ|SelectionKey.OP_WRITE); 当用户发送一个请求时,选择器通过返回键进行工作。 //循环实现 While((keysAdded = s.select())0) { //返回键值集合 set readyKeys = s.selectedKeys(); //使用Iterator枚举 Iterator I = readKeys.iterator(); While(i.hasNext()) { SelectionKey sk = (SelectionKey)i.next(); ...接收连接处理请求; } } 具体的处理可以根据键值的状态进行,上面的“接收连接处理请求”就可以为: i.remove(); if ( key.isAcceptable() ) { ... } else if ( key.isWritable() ) {

文档评论(0)

精品文库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档