- 浏览: 1149762 次
- 性别:
- 来自: 火星郊区
博客专栏
-
OSGi
浏览量:0
文章分类
- 全部博客 (695)
- 项目管理 (48)
- OSGi (122)
- java (79)
- Vaadin (5)
- RAP (47)
- mysql (40)
- Maven (22)
- SVN (8)
- 孔雀鱼 (10)
- hibernate (9)
- spring (10)
- css (3)
- 年审 (6)
- ant (1)
- jdbc (3)
- FusionCharts (2)
- struts (4)
- 决策分析 (2)
- 生活 (10)
- 架构设计 (5)
- 破解 (2)
- 狼文化 (4)
- JVM (14)
- J2EE (1)
- 应用服务器 (1)
- 我的链接 (5)
- 数学 (2)
- 报表 (1)
- 百科 (6)
- Flex (7)
- log4j (2)
- PHP (1)
- 系统 (2)
- Web前端 (7)
- linux (6)
- Office (1)
- 安全管理 (5)
- python (2)
- dom4j (1)
- 工作流 (3)
- 养生保健 (4)
- Eclipse (8)
- 监控开发 (1)
- 设计 (3)
- CAS (1)
- ZK (41)
- BluePrint (3)
- 工具 (1)
- SWT (7)
- google (2)
- NIO (1)
- 企业文化 (2)
- Windoes (0)
- RCP (7)
- JavaScript (10)
- UML (1)
- 产品经理 (2)
- Velocity (10)
- C (1)
- 单元测试 (1)
- 设计模式 (2)
- 系统分析师 (2)
- 架构 (4)
- 面试 (2)
- 代码走查 (1)
- MongoDB (1)
- 企业流程优化 (1)
- 模式 (1)
- EJB (1)
- Jetty (1)
- Git (13)
- IPV6 (1)
- JQuery (8)
- SSH (1)
- mybatis (10)
- SiteMesh (2)
- JSTL (1)
- veloctiy (1)
- Spring MVC (1)
- struts2 (3)
- Servlet (1)
- 权限管理 (1)
- Java Mina (1)
- java 系统信息 (6)
- OSGi 基础 (3)
- html (1)
- spring--security (6)
- HTML5 (1)
- java爬虫搜索 (1)
- mvc (3)
最新评论
-
Tom.X:
http://osgia.com/
将web容器置于OSGi框架下进行web应用的开发 -
chenyuguxing:
你好, 为什么我的bundle export到felix工程中 ...
在Apache Felix中运行bundle -
string2020:
<niceManifest>true</ni ...
Bundle Plugin for Maven -
jsonmong:
OSGI,是未来的主流,目前已相当成熟。应用OSGI比较好的, ...
基于OSGi的声明式服务 -
zyhui98:
貌似是翻译过来的,有很少人在linux上做开发吧
如何成为“10倍效率”开发者
jdk1.4 开始引入了新IO类,NIO包的目的是为了提高IO的效率。
缓冲区Buffer:
缓冲区的优点我就不多介绍了。
拥有3个属性:
(1)容量:一个缓冲区最多容量。
(2)界限:一个缓冲区可读写的范围。
(3)位置:接下来要读写的位置。
界限是用来控制当前读写的范围,如果容量为100,界限为10,则位置只能在0-10之间,即只能读写0-10之间的数据
提供了三个方法改变属性:
(1)clear():把界限移到容量处,把位置设为0.
(2)flip():把界限移到位置处,把位置移到0.
(3)rewind():界限不变,位置设为0.
ByteBuffer:字节缓冲区
创建:ByteBuffer bf = ByteBuffer.allocate(capacity);
MappedByteBuffer:ByteBuffer的子类
能够把文件的部分映射到缓冲区中。
方法:
get();
put();
bb.isRemaining();判断是否还有数据可读
import java.io.*; import java.nio.*; import java.nio.channels.*; public class TransferDemo{ public static void main(String args[])throws Exception{ FileChannel in = new FileInputStream("test.txt").getChannel(); FileChannel out = new FileOutputStream("out.txt").getChannel(); ByteBuffer bf = ByteBuffer.allocate(1024); while(in.read(bf)!=-1){ bf.flip(); out.write(bf); bf.clear(); } out.close(); in.close(); } }
疑问:光有Buffer,但是怎么和数据源和数据汇进行连接呢?
Channel通道:把数据源或数据汇和Buffer连接起来。
FileChannel是一个实现好的类,是文件和缓冲区的通道,在FileInputStream、FileOutputStream、RandomAccessFile中的getChannel();获得。
(1)read(ByteBuffer bf); 读取文件数据到ByteBuffer中
(2)write(ByteBuffer bf); 把ByteBuffer写入文件
把String包装到ByteBuffer中:ByteBuffer.wrap (str.getBytes());
利用Charset能够对ByteBuffer进行编码转换。
Charset cs = Charset.forName("UTF-8");
CharBuffer cs.decode(ByteBuffer);把ByteBuffer解码为Unicode编码并返回。
import java.io.*; import java.nio.*; import java.nio.channels.*; import java.nio.charset.*; public class FileChannelDemo01{ public static void main(String args[])throws Exception{ FileChannel fc = new FileOutputStream("text.txt").getChannel(); fc.write(ByteBuffer.wrap("你好".getBytes())); fc.close(); fc = new RandomAccessFile("text.txt","rw").getChannel(); fc.position(fc.size()); fc.write(ByteBuffer.wrap("朋友".getBytes())); fc.close(); fc = new FileInputStream("text.txt").getChannel(); ByteBuffer buf = ByteBuffer.allocate(1024); fc.read(buf); buf.flip(); Charset cs = Charset.defaultCharset(); System.out.println(cs.decode(buf)); fc.close(); } }
Charset类:字符编码转换类
Charset cs = Charset.defaultCharset();
Charset cs = Charset.forName("UTF-8");
获得字符集
UTF-16BE是Unicode码。
ByteBuffer encode(String);把String按照指定的字符集编码,并返回。
CharBuffer decode(ByteBuffer)按照指定的字符集转换成Unicode码。
import java.io.*; import java.nio.*; import java.nio.channels.*; public class CharsetConvert{ public static void main(String args[])throws Exception{ ByteBuffer bb = ByteBuffer.wrap("你好".getBytes("UTF-8")); CharBuffer cb = bb.asCharBuffer(); System.out.println(cb); bb = ByteBuffer.wrap("你好".getBytes("UTF-16BE")); cb = bb.asCharBuffer(); System.out.println(cb); } }
MappedByteBuffer:映射缓冲区
ByteBuffer的子类,用于因为文件太大不能放入内存的文件,能够映射文件的部分区域。
MappedByteBuffer b = channel.map(FileChannel.MapMode.READ_WRITE,pos,capacity); pos表示文件开始映射位置,capacity表示要映射的容量。
import java.nio.*; import java.io.*; import java.nio.channels.*; import java.nio.charset.*; public class MappedByteBufferDemo01{ public static void main(String args[])throws Exception{ int capacity = 0x8000000; MappedByteBuffer mb = new RandomAccessFile("test.txt","rw").getChannel().map(FileChannel.MapMode.READ_WRITE,0,capacity); mb.put("你好".getBytes("GBK")); mb.flip(); System.out.println(Charset.forName("GBK").decode(mb)); } }
缓冲区视图:
ByteBuffer提供了一些方法可以得到其他的视图,比如asCharBuffer()获得CharBuffer。
(1)CharBuffer cb = bb.asCharBuffer();
(2)IntBuffer ib = bb.asIntBuffer();
ByteBuffer提供了
getInt()用于读取整数缓冲区视图put进去的整数。
getChar()用于读取字符缓冲区视图put进去的字符。
import java.nio.*; public class BufferViewDemo{ public static void main(String args[])throws Exception{ ByteBuffer bb = ByteBuffer.allocate(100); CharBuffer cb = bb.asCharBuffer(); cb.put("你好"); bb.rewind(); /*while(bb.hasRemaining()){ System.out.println(bb.getChar()); }*/ IntBuffer ib = bb.asIntBuffer(); int[] arr = {1,2,3}; ib.put(arr); System.out.println(ib.get(2)); ib.flip(); while(ib.hasRemaining()){ int i = ib.get(); System.out.println(i); } } }
文件加锁:
得到锁并加锁:FileLock lock = channel.tryLock();
释放锁:lock.release();
发表评论
-
一个例子全部说明java泛型中的K,V,T,E,?,object的意思及其用法
2013-03-07 11:09 70491.意思 jdk中的K,V,T,E等泛型名称很多人以为 ... -
Log4j 把不同包的日志打印到不同位置
2012-11-29 08:23 1150需要的包和测试的代码下载附件! 如果需要将不同的日 ... -
Java多线程发展简史
2012-09-16 14:25 1037转自:http://www.raychase.ne ... -
Java编码易疏忽的十个问题
2012-09-06 08:52 914在Java编码中,我们容易 ... -
网络编程
2012-09-04 13:30 971计算机网络基础 什么是计算机网络 把分布在 ... -
获取Java程序运行的路径 | 获取当前jar包的路径
2012-09-04 11:55 14082经过试验,不管是否是 Jar 包,不管是否是 Tom ... -
java的concurrent用法详解
2012-08-03 11:28 1020我们都知道,在JDK1.5之前,Java中要进行业务并发时 ... -
Java程序员必知的8大排序
2012-07-05 09:56 10278 种排序之间的关系: ... -
Comparator与Comparable的区别
2012-07-05 08:38 1219当需要排序的集合或数组不是单纯的数字类型的时候,通常可以使用C ... -
RSA算法Java实现
2012-06-27 08:22 1416Java代码 package c ... -
队列阻塞浅析
2012-06-17 18:10 932这几天所做的项目中涉及到了队列阻塞机制,通过研究整理如下 ... -
Java面试过程中会遇到的问题
2012-06-13 13:04 11441、abstract的method是否可同时是static,是 ... -
【解惑】深入jar包:从jar包中读取资源文件
2012-06-13 13:02 1101我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。 ... -
java 处理文件路径中的空格
2012-06-13 12:57 1539问题背景: windows下有个目录名称Program ... -
java内存分配机制
2012-06-13 12:52 1172通过这几天对一个 ... -
byte[]转化成其他数据类型
2012-05-14 16:41 1656Java与其他语言数据类型之间的转换方法实例程序 /*** ... -
java中byte转换int时为何与0xff进行与运算
2012-05-14 16:39 1071java中byte转换int时为何 ... -
java整型数与网络字节序的 byte[] 数组转换关系
2012-05-14 16:31 6460工作项目需要在 java 和 c/c++ 之间进行 ... -
利用 Base64 缩短 UUID 至22位
2012-04-15 18:57 7175UUID还是比较常用的,尤其在web应用里。 有时在UR ... -
图解Java中的值传递与引用传递(更新版)
2012-04-09 12:49 1179编程的人,都会遇到值传递与引用传递的困惑,不过很快都会迎 ...
相关推荐
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(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...
### Java NIO 处理超大数据文件的知识点详解 #### 一、Java NIO简介 Java NIO(New IO)是Java平台上的新输入/输出流API,它提供了与传统IO(即Java IO)不同的数据处理方式。NIO在Java 1.4版本引入,并在后续版本...
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(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在传统的Java IO模型中,读写操作是阻塞的,即当调用read或write方法时,线程会等待数据准备好或...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效的数据传输方式。传统的Java I/O模型(BIO)在处理大量并发连接时效率较...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统I/O模型的新技术。在Java 1.4版本中引入,NIO提供了一种全新的I/O编程方式,使得Java开发者能够更高效地处理I/O操作...
### Java NIO 实现Socket通信详解 #### 一、NIO与传统IO的区别及优势 在探讨如何使用Java NIO实现Socket通信之前,我们需要先理解NIO(Non-blocking I/O,非阻塞I/O)与传统阻塞I/O之间的区别。 **传统阻塞I/O...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效、灵活的I/O操作方式。NIO与传统的 Blocking I/O(阻塞I/O)模式相比,...