java NIO入门【原】】的更多相关文章

本文原题“<NIO 入门>,作者为“Gregory M. Travis”,他是<JDK 1.4 Tutorial>等书籍的作者. 1.引言 Java NIO是Java 1.4版加入的新特性,虽然Java技术日新月异,但历经10年,NIO依然为Java技术领域里最为重要的基础技术栈,而且依据现实的应用趋势,在可以预见的未来,它仍将继续在Java技术领域占据重要位置. 网上有关Java NIO的技术文章,虽然写的也不错,但通常是看完一篇马上懵逼.接着再看!然后,会更懵逼... 哈哈哈!…
Java NIO 入门(二)缓冲区内部细节 概述 本文将介绍 NIO 中两个重要的缓冲区组件:状态变量和访问方法 (accessor). 状态变量是前一文中提到的"内部统计机制"的关键.每一个读/写操作都会改变缓冲区的状态.通过记录和跟踪这些变化,缓冲区就可能够内部地管理自己的资源. 在从通道读取数据时,数据被放入到缓冲区.在有些情况下,可以将这个缓冲区直接写入另一个通道,但是在一般情况下,您还需要查看数据.这是使用访问方法get()来完成的.同样,如果要将原始数据放入缓冲区中,就要使…
server package com.server; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; public class Server { public static void main(String[] args) throws Except…
NIO入门 前段时间在公司里处理一些大的数据,并对其进行分词.提取关键字等.虽说任务基本完成了(效果也不是特别好),对于Java还没入门的我来说前前后后花了2周的时间,我自己也是醉了.当然也有涉及到机器学习的知识,我想陆陆续续的记录下我的这一次任务的过程,也算做一个总结. 首先,手上有这么个达G级别的文件,按照Java普通I/O的方式肯定是不行的了,划分文件的话,也不知何年何月才能读完.所以后来上网查找了相关资料,才知道有这么个神奇的NIO. 在Java编程中,I/O是用流的方式读取文件,所有I…
本文主要记录 Java 中  NIO 相关的基础知识点,以及基本的使用方式. 一.回顾传统的 I/O 刚接触 Java 中的 I/O 时,使用的传统的 BIO 的 API.由于 BIO 设计的类实在太多,至今我仍然不能信手拈来的写出完成的 BIO 的代码.不过它基本的特点和分类,我还是记得一二的. 从方向上看,分为输入流和输出流: 从类别上看,分为字节流和字符流: 从缓冲去上看,分为带缓冲的流和不带缓冲的流. 一个便于使用的的流对象的构建,一般都是由相对底层的流逐渐构建出相对高级的流.通常我都是…
例子中有些写法参考自Netty4源码,建议在实际运用中采用Netty,而非原生的Java NIO(小心epoll空转). 1. 服务器端 public class NioServer { static SelectorProvider provider = SelectorProvider.provider(); static Selector selector = null; static ServerSocketChannel server = null; private static vo…
一.Java IO 和 系统 IO 不匹配 在大多数情况下,Java 应用程序并非真的受着 I/O 的束缚.操作系统并非不能快速传送数据,让 Java 有事可做:相反,是 JVM 自身在 I/O 方面效率欠佳.操作系统与 Java 基于流的 I/O模型有些不匹配.操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取(DMA)的协助下完成的.而 JVM 的 I/O 操作类喜欢操作小块数据——单个字节.几行文本.结果,操作系统送来整缓冲区的数据,java.io 包的流数据类再花大量时间…
Java Socket.SocketServer的读写.连接事件监听,都是阻塞式的.Java提供了另外一种非阻塞式读写.连接事件监听方式——NIO.本文简单的介绍一个NIO Socket入门例子,原理以及详细用法,参考后续文章 服务端代码 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey;…
Apache MINA 2 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架.它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP.UDP/IP.串口和虚拟机内部的管道等传输方式.Apache MINA 2 可以作为开发网络应用程序的一个良好基础. Apache MINA是非常著名的基于java nio的通信框架,以前都是自己直接使用udp编程,新项目选型中考虑到网络通信可能会用到多种通信方式,因此使用了MINA. 本文结构: (1)客户端和服务器代码 :虽然是udp的,但是m…
JDK1.4引入了Java NIO API(Java New IO),Java NIO得到了广泛应用.NIO允许程序进行非阻塞IO操作.java.nio.* 包括以下NIO基本结构: Buffer - 数据的容器: Chartsets - 针对字节与Unicode的容器转换器: Channels - 代表IO操作的实体连接: Selectors - 提供可选择的.可复用的非阻塞IO: Java NIO引入了两个新的概念:通道Channel和选择器Selector: Channels是服务端和客户…
Java NIO Selector Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是可以管理多个网络链接. 前面说过通道就是连接,比如同一时间有很多连接过来,这些连接,也就是channel都会注册到Selector中,Selector就会巡视这些channel,看看哪些可以操作(可读或者可写),并不会进行读写操作.而仅仅进行巡视,并不是很麻烦,所以即使Selector是单个线程也是…
引言缓冲区是一个用于特定基本类型的容器.由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互.数据从通道存入缓冲区,从缓冲区取出到通道中. 一.创建缓冲区缓冲区的本质是 数组 ,用于存储不同类型的数据,根据数据类型(boolean 除外),提供了相应类型的缓冲区,如ByteBuffer.IntBuffer等.这些缓冲区的管理方式都是类似的,都是通过 allocate() 方法指定容量并创建缓冲区. //…
java.nio:NIO-2: NIO 面向流的IO体系一次只能处理一个或多个字节/字符,直至读取所有字节/符,且流中的数据不能前后移动.效率低,当数据源中没有数据时会阻塞线程.Java-4提供的新API,Non-blocking IO(New IO,面向块的IO体系)为所有的原始类型提供Buffer缓存支持,缓冲区中数据可前后移动.灵活性好,非阻塞式允许一个单独的线程可以管理多个输入/出Channel,但是处理和解析数据相对复杂. 采用内存映射文件的方式处理输入输出,将文件或文件的一段区域映射…
前言 本博客只简单介绍NIO的原理实现和基本工作流程 I/O和NIO的本质区别 NIO将填充和提取缓冲区的I/O操作转移到了操作系统 I/O 以流的方式处理数据,而 NIO 以缓冲区的方式处理数据:IO是阻塞的,NIO是非阻塞的,直到有数据被读取或者数据完全写入时,IO线程才开始执行操作,而NIO在如何情况都是非阻塞的 通道(Channel)和缓冲区(Buffer) NIO三个核心对象:通道(Channel).缓冲区(Buffer)和选择器(Selector) 缓冲区只暂时储存数据,通道用于读取…
NIO 入门 Greg Travis2003 年 11 月 17 日发布 分享此页面 WeiboGoogle+用电子邮件发送本页面 20 在开始之前 关于本教程 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的.NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的.面向块的 I/O.通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO 不用使用本机代码就可以利用低级优化,这是原来的 I/O 包所无法做到的. 在本教程中,我们将讨论 NIO 库的几乎所有…
一.什么是 Java 技术?为何需要 Java? Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台.有许多应用程序和 Web 站点只有在安装 Java 后才能正常工作,而且这样的应用程序和 Web 站点日益增多.Java 快速.安全.可靠.从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java 无处不在! Java是一种计算机编程语言,拥有跨平台.面向对象.泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发. 任职于…
转载的原文章也找不到!从以下博客中找到http://blog.csdn.net/wuxianglong/article/details/6604817 转载自:李会军•宁静致远 最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是JavaNIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下,顺便写点东西,就当是自己学习 Java NIO的笔记了.本文为NIO使用及原理分析的第一篇,将会介绍NIO中几个重要的概念…
传统的同步阻塞式I/O编程 基于NIO的非阻塞编程 基于NIO2.0的异步非阻塞(AIO)编程 为什么要使用NIO编程 为什么选择Netty 第二章 NIO 入门 2.1 传统的BIO编程 2.1.1 BIO 通信模型图 2.1.2 同步阻塞式I/O创建的TimeServer源码分析 package com.phei.netty.bio; import java.io.IOException; import java.net.ServerSocket; import java.net.Socke…
"Java NIO系列教程" 是笔者hans为NIO的初学者编写的一份入门教程,想仔细学习的同学可以按照顺序去阅读.由于我学的也不是特别的精,所以错误.疏漏在所难免,希望同学们指正交流,一起进步. 第0讲 Java NIO教程 前言 第1讲 Java NIO教程 文件系统 第2讲 Java NIO教程 Buffer 第3讲 Java NIO教程 Channel 第4讲 Java NIO教程 Selector 番外篇 Java NIO教程 MappedByteBuffer…
IO是输入和输出的简称,在实际的使用时,输入和输出是有方向的.就像现实中两个人之间借钱一样,例如A借钱给B,相对于A来说是借出,而相对于B来说则是借入.所以在程序中提到输入和输出时,也需要区分清楚是相对的内容. 在 程序中,输入和输出都是相对于当前程序而言的,例如从硬盘上读取一个配置文件的内容到程序中,则相当于将文件的内容输入到程序内部,因此输入和“读”对 应,而将程序中的内容保存到硬盘上,则相当于将文件的内容输出到程序外部,因此输出和“写”对应.熟悉输入和输出的对应关系,将有助于后续内容的学习…
推荐阅读IBM developerWorks中NIO的入门教程,尤其是对块I/O和流I/O不太清楚的开发者. 说到socket服务器,第一反应是java.net.Socket这个类.事实上在并发和响应时间要求不高的场合,是可以用java.net.Socket来实现的,比如写一个局域网聊天工具.发送文件等.但它的缺点也很明显,需要自行对接受的线程进行维护,管理缓冲区的分配等,我尝试过用java.net.Socket完成一个瞬时负载在千人左右的服务器,却因后期改动和维护异常麻烦而放弃. Java自1…
使用APKtool回编译APK,出现错误如下:    Exception in thread "main" org.yaml.snakeyaml.error.YAMLException: java.nio.char    set.MalformedInputException: Input length = 1        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)        at…
在NIO.2的文件系统中,Path是一切操作的基础.Path准确来说,代表着文件系统中的位置.可以代表一个目录(也就是通常所说的文件夹),也可以代表一个文件. 在新文件系统中,还有一个不得不说的就是Files.它是一个工具类,但是这个工具类跟打了鸡血一样,强大到不可思议.以前需要写繁重代码或者需要调用第三方类库才能完成的功能,现在只需一行. 下面的代码展示了Path的最基本操作-获取一个Path:并且通过我们得到的Path和强大的工具类Files来创建一个文件或目录 Path dir0 = Pa…
Java IO 在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构.一种简单而又直接的解决方案是“one-thread-per-connection”.这是一种基于阻塞式I/O的多线程模型.在该模型中,Server为每个Client连接创建一个处理线程,每个处理线程阻塞式等待可能达到的数据,一旦数据到达,则立即处理请求.返回处理结果并再次进入等待状态.由于每个Client连接有一个单独的处理线程为其服务,因…
Mina:Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 Mina 版本2.04支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序,Mina 所支持的功能也在进一步的扩展中.目前,正在使用 Mina的应用包括:Apache Directory Project.AsyncWeb.AMQP(Ad…
相关学习资料 http://www.molotang.com/articles/903.html http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html 目录 . NIO.NIO.2简介 . NIO中的关键技术 1. NIO.NIO.2简介 Java中的输入流.输出流都是阻塞式的输入.输出.不仅如此,传统的输入流.输出流都是通过字节的移动来处理的(即使是字符流,在底层也是通过字节流来进行处理的),也就是说,面向流的…
一些很好的blog(待更新): 1.NIO入门 2.NIO.2 入门,第 1 部分: 异步通道 API I- 就是从硬盘到内存 O- 就是从内存到硬盘 一.阻塞IO 第一种方式:我从硬盘读取数据,然后程序一直等,数据读完后,继续操作.这种方式是最简单的,叫阻塞IO. 第二种方式:我从硬盘读取数据,然后程序继续向下执行,等数据读取完后,通知当前程序(对硬件来说叫中断,对程序来说叫回调),然后此程序可以立即处理数据,也可以执行完当前操作在读取数据. 在 Java IO 中,这两种都是阻塞式 IO,N…
1. JAVA NIO是什么? 从JDK1.4开始,java提供了一系列改进的输入/输出处理的新功能,这些功能被统称为新IO(New IO,简称NIO),新增了许多用于处理输入/输出的类,这些类都被放在java.nio包以及子包下, 并且对原java.io包中的许多类都以NIO为基础进行了改写. 2. 为什么使用JAVA NIO? NIO和传统的IO有相同的目的,都是用于进行输入/输出,但新IO采用内存映射文件的方式来处理输入/输出,新IO将文件或文件的一段区域映射到内存中,这样就可以像访问内存…
Mina:Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 Mina 版本2.04支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序,Mina 所支持的功能也在进一步的扩展中.目前,正在使用 Mina的应用包括:Apache Directory Project.AsyncWeb.AMQP(Ad…
最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下,顺便写点东西,就当是自己学习 Java NIO的笔记了.本文为NIO使用及原理分析的第一篇,将会介绍NIO中几个重要的概念. 在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度…