Java NIO 小结

转载 2012年03月30日 09:48:26
http://hi.baidu.com/boywell/blog/item/2bde80f9b967cd05d9f9fdb6.html

1, NIO 不是来替代传统IO的,传统的IO经过改写,效率也有了很大的提升;

2,NIO的两个核心概念:Buffer 抽象类 & Channel 接口;

3,Buffer及其子类不依赖于Channel对象使用,反过来,Channel对象需要使用Buffer对象

4,Buffer 翻译成“缓冲器”比“缓冲区”更好,前者暗示了Buffer除了维护一个底层的数据结构外,还拥有其他管理这个数据机构的功能(职责);

     Java NIO 为除了boolean类型外的基本类型提供了Buffer子类,如IntBuffer.最常用的是ByteBuffer。关于Buffer的内部结构值得研究,有一些APIs专门用来维护Buffer内部的数据结构,见Java docs.

5,Buffer可以分为直接buffer和间接buffer。

     JVM有自己的专属内存区域,OS也有自己的系统区域,通常JVM从外存读取一个数据,需要从OS的系统区拷贝到自己的内存区域,这是间接buffer。直接Buffer就是JVM让OS直接操作自己的内存区,不用在copy了,这样IO性能就上去了,但是如果不是非常注重性能,就不要使用直接Buffer, 因为构建一个直接Buffer也需要代价的。

      ByteBuffer directByteBuffer = ByteBuffer.allocateDirect(1024); //只有ByteBuffer有此工厂方法

6,Channel 可以看成是通往某一数据源的连接,通过该连接你可以对相应的数据源进行操作。文件FileChannel 只能从FileInputStream 或者FileOutputStream中获得。

7,对比5,NIO提供了MappedByteBuffer类,该类的对象可以从Channel获得,建立起了从文件到OS内存的直接映射,只要对该对象的任何改动,就会立刻回写到磁盘文件中,由于使用的是OS的内存区而不是JVM的,加上通常情况下,JVM的读写操作最终还是要OS去执行,这就使得读写效率很高,依赖于具体的OS平台系统。

JAVA NIO SOCKET大文件上传服务器

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

Java NIO 简单例子

服务器端: package nioT; import java.io.IOException; import java.net.InetSocketAddress; import java.nio...
  • whb123andy
  • whb123andy
  • 2013年12月10日 14:22
  • 3072

Java NIO 详解(一)

NIO即新的输入输出,这个库是在JDK1.4中才引入的。它在标准java代码中提供了高速的面向块的IO操作。 一、基本概念描述1.1 I/O简介I/O即输入输出,是计算机与外界世界的一个借口。IO操作...
  • suifeng3051
  • suifeng3051
  • 2015年09月14日 11:07
  • 21273

攻破JAVA NIO技术壁垒

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

Java NIO开发需要注意的陷阱(转)

转自 陷阱1:处理事件忘记移除key 在select返回值大于0的情况下,循环处理 Selector.selectedKeys集合,每处理一个必须从Set中移除 I...
  • martin_liang
  • martin_liang
  • 2014年11月17日 23:30
  • 810

Java NIO实战之聊天室

在工作之余花了两个星期看完了《Java NIO》,总体来说这本书把NIO写的很详细,没有过多的废话,讲的都是重点,只是翻译的中文版看的确实吃力,英文水平太低也没办法,总算也坚持看完了。《Java NI...
  • abc_key
  • abc_key
  • 2014年06月07日 01:44
  • 7542

Java NIO-非阻塞通信

相对于非阻塞通信的复杂性,通常客户端并不需要使用非阻塞通信以提高性能,故这里只有服务端使用非阻塞通信方式实现...
  • a19881029
  • a19881029
  • 2013年10月17日 10:31
  • 4281

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

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

7.Java NIO系列教程之Server/Client完整示例

TCPServer类: package com.gw.demo; import java.io.IOException; import java.net.InetSocketAddress; imp...
  • shihuacai
  • shihuacai
  • 2015年01月23日 15:22
  • 2181

Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)

本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解。 1、BIO编程 1.1、传统的BIO编程 网络编程的基本模型是C/S模型,即两个进程间的通信。 服务...
  • anxpp
  • anxpp
  • 2016年05月29日 01:46
  • 85245
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java NIO 小结
举报原因:
原因补充:

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