NIO入门

原创 2004年07月19日 14:57:00
通道(Channel)和缓存区(Buffer)。

通道是对nio包中的流的模拟。到任何目的地(或来自任何地方)的所有数据都必须通过一个 Channel 对象。一个 Buffer 实质上是一个容器对象。发送给一个通道的所有对象都必须首先放到缓冲区中;同样地,从通道中读取的任何数据都要读到缓冲区中。通道与流的不同之处在于通道是双向的。
读和写是 I/O 的基本过程。从一个通道中读取很简单:只需创建一个缓冲区,然后让通道将数据读到这个缓冲区中。写入也相当简单:创建一个缓冲区,用数据填充它,然后让通道用这些数据来执行写入操作。
读取文件。如果使用原来的 I/O,那么我们只需创建一个 FileInputStream 并从它那里读取。读取文件涉及三个步骤:(1) 从 FileInputStream 获取 Channel,(2) 创建 Buffer,(3) 将数据从 Channel 读到 Buffer 中。
下面是一个读取文件的例子:

第一步是获取通道。我们从 FileInputStream 获取通道:


FileChannel fc = fin.getChannel();

下一步是创建缓冲区:

ByteBuffer buffer = ByteBuffer.allocate( 1024 );

最后,需要将数据从通道读到缓冲区中,如下所示:

fc.read( buffer );

我们不需要告诉通道要读 多少数据 到缓冲区中。每一个缓冲区都有复杂的内部统计机制,它会跟踪已经读了多少数据以及还有多少空间可以容纳更多的数据。

读写更加简单:

因为缓冲区会跟踪它自己的数据,所以 CopyFile 程序的内部循环 (inner loop) 非常简单,如下所示:

fcin.read( buffer );
fcout.write( buffer );



Java NIO(一)入门篇

概念 java.nio(java new IO),是jdk1.4 里提供的新api ,为所有的原始类型提供缓存支持。Sun 官方标榜的特性如下: 为所有的原始类型提供(Buffer)缓存支持。字符集编...
  • zhushuai1221
  • zhushuai1221
  • 2016年03月31日 13:52
  • 702

Java NIO入门学习(一)

本文为NIO入门学习的第一篇,将会介绍NIO中几个重要的概念。 I/O即输入输出,指的是计算机和外界的接口,或者是单个程序同计算机其他部分的接口。 在Java1.4之前的I/O系统中,提供的都是面向流...
  • u011500793
  • u011500793
  • 2014年03月19日 08:20
  • 2439

Java NIO入门与详解

Java NIO介绍 nio 是 New I/O 的简称,属于当时 jdk1.4 提供的新 api。如今 jdk 版本已经到 1.8 了,新 IO 这个称谓有点不合适了,nio 还有一个更合适的...
  • LS1firesoar
  • LS1firesoar
  • 2017年12月22日 17:00
  • 51

NIO 入门 实例

学习NIO入门实例
  • zhangchaoyi1a2b
  • zhangchaoyi1a2b
  • 2016年04月14日 19:11
  • 152

NIO通讯框架之阿堂教程:Mina学习笔记-入门篇(一)

在两三年前,阿堂在技术博客(http://blog.sina.com.cn/heyitang) 上曾经写过"JAVA新I/O学习系列笔记(1)"和"JAVA新I/O学习系列笔记(2)"两篇学习笔记...
  • younger_z
  • younger_z
  • 2015年09月08日 11:29
  • 1353

攻破JAVA NIO技术壁垒

现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。再者,现在互联网的面...
  • u013256816
  • u013256816
  • 2016年05月19日 21:25
  • 20755

JAVA NIO SOCKET大文件上传服务器

当前很多手机应用或者是网络应用都需要支持大文件上传功能,有些用FTP来实现上传但是FTP存在许多的问题。比如FTP的安全问题还有不支持GZIP压缩等问题。采用SOCKET来实现文件上传,很轻松就可以实...
  • reaganjava
  • reaganjava
  • 2013年03月19日 12:48
  • 2520

BIO与NIO、AIO的区别(这个容易理解)

IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。 一、BIO      在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一...
  • skiof007
  • skiof007
  • 2016年10月20日 15:52
  • 36022

面试题:关于一些nio的问题资料

Java NIO提供了与标准IO不同的IO工作方式:  Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)...
  • hxpjava1
  • hxpjava1
  • 2017年02月21日 14:38
  • 3956

Java NIO-非阻塞通信

相对于非阻塞通信的复杂性,通常客户端并不需要使用非阻塞通信以提高性能,故这里只有服务端使用非阻塞通信方式实现...
  • a19881029
  • a19881029
  • 2013年10月17日 10:31
  • 4288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NIO入门
举报原因:
原因补充:

(最多只允许输入30个字)