- 浏览: 1653710 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
jdk1.4提供了java.nio包,为从根本上改善I/O的性能提供了可能,但是nio要比以前的I/O要复杂,提供了更底层的操作和更细的api。学起来并不是那么快就上手,有专门一本书
介绍nio的。我希望通过总结更好的梳理整个nio框架各个类之间的关系,从而能够灵活的使用nio包。
nio通常需要涉及到三个对象:
1、数据源:从文件中获得的FileInputStream/FileOutputStream、从socket中获得的输入输出流等
2、缓冲区对象(buffer):nio定义了一系列buffer对象,最基本的是ByteBuffer,其他还有各种基本数据类型除了boolean类型外,所对应的buffer类型。使用这些buffer一般的过程是:从数据源中读到ByteBuffer中,然后使用ByteBuffer.asXxxBuffer()转换成特定的基本类型,然后对这个基本类型的buffer进行操作;把基本类型转换成ByteBuffer类型,然后写入数据源中。
3、通道对象(channel):他提供了对数据源的一个连接,可以从文件中获得FileChannel,从Socket中获得SocketChannel,它是一个中介。提供了数据源与缓冲区之间的读写操作。
我们可以同过一句话来解释他们三者之间的关系:
channel对象提供了数据源与缓冲区之间的读写操作,是数据源与缓冲区的一个桥梁,通过这个桥梁,数据在两者之间流动。
首先我们看看这个中介Channel类的整个结构:
Channel接口声明了两个方法:
close(),用来关闭通道
isOpen(),用于测试通道是否打开
其他的通道:
ByteChannel只是简单的合并了WritableByteChannel和ReadableChannel的,ScatteringByteChannel接口扩展了ReadableChannel接口,添加了一个读取并将数据
分布在不同缓冲区的方法,而GatheringByteChannel接口在WritableByteChannel的基础上添加了将多个独立的缓冲区写入驱动器中的方法。
例子:(我们忽略了各种Exception)
先总结到这,下次总结各种Buffer及其操作。
没有区别,只是不同的API而已,你可以直接使用stream,但FileChannel
提供了更多的控制和功能,支持并发和内存映射,上述代码只是演示了怎么
获得channel,然后写数据,无法体现其他功能。
介绍nio的。我希望通过总结更好的梳理整个nio框架各个类之间的关系,从而能够灵活的使用nio包。
nio通常需要涉及到三个对象:
1、数据源:从文件中获得的FileInputStream/FileOutputStream、从socket中获得的输入输出流等
2、缓冲区对象(buffer):nio定义了一系列buffer对象,最基本的是ByteBuffer,其他还有各种基本数据类型除了boolean类型外,所对应的buffer类型。使用这些buffer一般的过程是:从数据源中读到ByteBuffer中,然后使用ByteBuffer.asXxxBuffer()转换成特定的基本类型,然后对这个基本类型的buffer进行操作;把基本类型转换成ByteBuffer类型,然后写入数据源中。
3、通道对象(channel):他提供了对数据源的一个连接,可以从文件中获得FileChannel,从Socket中获得SocketChannel,它是一个中介。提供了数据源与缓冲区之间的读写操作。
我们可以同过一句话来解释他们三者之间的关系:
channel对象提供了数据源与缓冲区之间的读写操作,是数据源与缓冲区的一个桥梁,通过这个桥梁,数据在两者之间流动。
首先我们看看这个中介Channel类的整个结构:
Channel < Closable WritableByteChannel < Channel InterruptibleChannel < Channel ReadableByteChannel < Channel GetherByteChannel < WritableByteChannel ByteChannel < WritableByteChannel,ReadableByteChannel ScatteringByteChannel < ReadableByteChannel
Channel接口声明了两个方法:
close(),用来关闭通道
isOpen(),用于测试通道是否打开
其他的通道:
ByteChannel只是简单的合并了WritableByteChannel和ReadableChannel的,ScatteringByteChannel接口扩展了ReadableChannel接口,添加了一个读取并将数据
分布在不同缓冲区的方法,而GatheringByteChannel接口在WritableByteChannel的基础上添加了将多个独立的缓冲区写入驱动器中的方法。
Closeable: void close()//关闭源或目的地,并释放资源 Channel: void close()//关闭通道 void boolean isOpen()//判断通道是否打开 ReadableByteChannel: int read(ByteBuffer input) //将字节从通道读入input缓冲区中,返回读取的字节数,到达流结尾时,返回-1 WritableByteChannel: int write(ByteBuffer output) //将字节从实参output缓冲区写入通道,返回写的字节数 ByteChannel 仅仅继承了ReadableByteChannel和WritableByteChannel的方法 ScatteringByteChannel: int read(ByteBuffer[] inputs) //将字节从通道读入inputs缓冲区数组中,返回读取的字节,到达流末尾是,返回-1 int read(ByteBuffer[] inputs,int offset,int length) //将字节从通道读inputs[offset]---inputs[offeset+length-1]缓冲区中 GatherByteChannel: int write(ByteBuffer[] outputs); //把outputs缓存区数组写入通道中 int write(ByteBuffer[] outputs,int offset,int length); 把从outputs[offset]-->outputs[offset+length-1]缓冲区写入通道中
例子:(我们忽略了各种Exception)
File file = new File("C:\\test.txt"); FileOutputStream fos = new FileOutputStream(file); FileChannel outputChannel = fos.getChannel(); String str = "Hello,just a test"; ByteBuffer bb = ByteBuffer.wrap(str.getBytes()); outputChannel.write(bb);
先总结到这,下次总结各种Buffer及其操作。
评论
2 楼
fuliang
2009-10-17
david.org 写道
你好,fuliang,您可以解释一下,上述代码中
与不使用FileChannel的具体区别么?
-dongtalk@gmail.com
# File file = new File("C:\\test.txt"); # FileOutputStream fos = new FileOutputStream(file); # FileChannel outputChannel = fos.getChannel(); # String str = "Hello,just a test"; # ByteBuffer bb = ByteBuffer.wrap(str.getBytes()); # outputChannel.write(bb);
与不使用FileChannel的具体区别么?
-dongtalk@gmail.com
没有区别,只是不同的API而已,你可以直接使用stream,但FileChannel
提供了更多的控制和功能,支持并发和内存映射,上述代码只是演示了怎么
获得channel,然后写数据,无法体现其他功能。
1 楼
david.org
2009-10-17
你好,fuliang,您可以解释一下,上述代码中
与不使用FileChannel的具体区别么?
-dongtalk@gmail.com
# File file = new File("C:\\test.txt"); # FileOutputStream fos = new FileOutputStream(file); # FileChannel outputChannel = fos.getChannel(); # String str = "Hello,just a test"; # ByteBuffer bb = ByteBuffer.wrap(str.getBytes()); # outputChannel.write(bb);
与不使用FileChannel的具体区别么?
-dongtalk@gmail.com
发表评论
-
Builder模式遇到继承
2013-10-13 13:48 0interface Self<T extends ... -
Builder模式遇到集成
2013-10-13 13:47 0package com.qunar.qss.business. ... -
JVM调优Step by Step
2012-02-02 17:38 0现代的JVM能够适应于各种应用和领域,每个应用和领域的使用 ... -
commons-lang StringUtils#split的坑
2011-12-31 10:11 3153今天用StringUtils#split,陷入了前两个坑。需求 ... -
使用scala.sys.process包和系统交互
2011-07-19 00:00 6490在Java中我们可以使用Runtime.getRuntime( ... -
HttpClient Json请求工具
2011-05-05 18:32 17848发送Json请求,结果返回Json. public sta ... -
利用Java反射实现通用的Excel报表
2011-04-12 16:00 2018最近有很多客户报表需要提供客户下载,需要生成一个Excel的格 ... -
深入异常处理
2011-03-31 20:46 1799异常处理是写一个健壮 ... -
Java序列化注意一些点
2011-03-12 21:04 18451.序列化ID的问题: 标示了版本号,版本号一致才能反序列化成 ... -
Java动态代理
2010-09-24 00:34 4459Java提供了动态代理,可以完成AOP和装饰模式的功能,主要的 ... -
Java Timestamp是和ExtJS的timestamp不兼容
2010-08-09 20:33 3351Timestamp纳秒级别的,ExtJS的timestamp使 ... -
XML DocumentBuilder#parse(String str)
2010-07-06 15:55 3886DocumentBuilderFactory dbf = ... -
[备忘]String#split/substring的子串会共享原来大的String
2010-03-29 17:18 1489如果每次需要大字符串中的很小的一个字串,可能会引起内存中大量的 ... -
runtime.exec()执行进程block死锁问题
2010-01-18 21:39 5284最近在java代码中使用runtime.exec执行rsync ... -
URL中文问题
2010-01-08 14:46 10523最近使用HttpClient,和Java的java.net.U ... -
A TaskExecutor Impl
2009-12-07 11:33 1625import java.util.ArrayList; im ... -
使用XStream把Java对象XML/JSON格式的序列化和反序列化
2009-05-05 11:37 6235试了一下Thoughtworks的XStream,以测试驱动和 ... -
从《编程的未来》这篇文章想到C++和Java语言的爽与不爽
2009-05-01 23:44 3967从编程的未来这篇文 ... -
《Effetive Java》读书笔记二
2009-02-23 14:23 1601第二章 所有对象共有的 ... -
《Effetive Java》读书笔记一
2009-02-19 11:36 2180《Effetive Java》和 《Effective C++ ...
相关推荐
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...
Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在传统的Java IO模型中,读写操作是阻塞的,即当调用read或write方法时,线程会等待数据准备好或...
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,...
Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...
#### 一、Java NIO简介 Java NIO(New IO)是Java平台上的新输入/输出流API,它提供了与传统IO(即Java IO)不同的数据处理方式。NIO在Java 1.4版本引入,并在后续版本中得到了进一步增强和完善。相较于传统的Java ...
Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效的数据传输方式。传统的Java I/O模型(BIO)在处理大量并发连接时效率较...
java侧起server(NioUdpServer1.java),基于Java Nio的selector 阻塞等候,一个android app(NioUdpClient1文件夹)和一个java程序(UI.java)作为两个client分别向该server发数据,server收到后分别打印收到的消息...
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(同步阻塞I/O)相对。NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种I/O模型,旨在提供一种更高效、更具弹性的I/O处理方式。相比于传统的BIO( Blocking I/O)模型,NIO在处理高并发和大...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于标准Java IO API的处理I/O操作的方式。NIO的主要特点是面向缓冲区,非阻塞I/O,以及选择器,这些特性使得NIO在处理大量并发连接时表现出更高...
### Java NIO 系列教程(一):Java NIO 概述 #### 一、引言 Java NIO(New IO)是Java SE 1.4版本引入的一个新的I/O处理框架,它提供了比传统Java IO包更高效的数据处理方式。NIO的核心在于其三大组件:Channels...