- 浏览: 112563 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (79)
- java (8)
- java虚拟机 (3)
- 学习类 (4)
- Java SE (26)
- java引用 (1)
- 工作总结。 (2)
- JSF (1)
- 软件架构 (1)
- Javascript (10)
- struts2 (1)
- eclipse (1)
- mysql (1)
- ArcGis (4)
- dojo (1)
- Extjs (1)
- jquery (4)
- 软件包 (1)
- 控件 (1)
- tuijian (0)
- 命令 (1)
- JAVAEE (1)
- goagent教程详细版猫理会 (0)
- python (0)
- tomcat (1)
- eclipse 出 can not create virtual machine (1)
- spring (3)
- 设计模式 (3)
- hibernate (1)
- dd (0)
- 样式 (0)
- http://blog.csdn.net/wisgood/article/details/11762427 (0)
最新评论
-
bz5011:
node.eachChild() 要延迟,等node.expa ...
EXTJS学习笔记----EXTJs中带复选框的tree,选中父节点时所有子节点也被选中 -
hvang1988:
[img][/img][url][/url][flash= ...
jquey 取值 -
xiaguangme:
写的很不错
java需要关注的知识点---HashMap -
perfect613:
sinly 写道perfect613 写道你好,有个问题请教一 ...
JS动态创建表格,动态设置属性,动态添加事件 . -
aiyingpower:
把哥的代码拿过来也不注明一下?
arcgis地图————————基础操作
缓冲器操纵数据:
ByteBuffer是数据移进移出通道的唯一方式,使用ByteBuffer.wrap把子节数组包装起来然后用getChannel()方法在FileInputStream上打开一个通道,接着将来自于ByteBuffer的数据写入到FileChannel中。
ByteBuffer的方法详细:
capacity()--->返回缓冲区容量
clear() --->清空缓冲区,将position设置为0,limit设置为容量。调用此方法可以覆写缓冲区。
flip() ---> 将limit设置为position,position设置为0,此方法用于准备从缓冲区读取已经写入的数据。
limit() --->返回limit的值。
limit(int limit)---> 设置limit的值
mark() ---> 将mark设置为position.
position() ---> 返回position的值。
position(int pos) --->设置position的值。
remaining() ---> 返回(limit - position)
hasRemainging() --> 若有介于position和limit之间的元素,返回true.
mark---->标记 position ----->位置 limit----> 界限 capacity-->容量
FileInputStream,FileOutputStream 和 RandomAccessFile 和FileChannel的转换
使用allocateDirect()提高速度。
使用transferTo/treansferFrom将一个管道和另外一个管道相通,达到上面copy的效果。
使用CharBuffer的asCharBuffer()方法读数据:
转换数据(详解Charset):
get date from bytebuffer:
使用IntBuffer存储int:
byteBuffer转换其他类型buffer:
ByteBuffer默认是以高位优先的形式存储数据的,可以使用ByteOrder.BIG_ENDIAN 或者ByteOrder.LITLE_ENDIAN改变ByteBuffer的字节排序方式,数据在网上传递时,也常常是以高位优先的形式。通过以下程序来改变字节顺序。
输出结果:
[0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102]
ByteOrder.BIG_ENDIAN:[0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102]
ByteOrder.LITTLE_ENDIAN:[97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0]
ByteBuffer是数据移进移出通道的唯一方式,使用ByteBuffer.wrap把子节数组包装起来然后用getChannel()方法在FileInputStream上打开一个通道,接着将来自于ByteBuffer的数据写入到FileChannel中。
ByteBuffer的方法详细:
capacity()--->返回缓冲区容量
clear() --->清空缓冲区,将position设置为0,limit设置为容量。调用此方法可以覆写缓冲区。
flip() ---> 将limit设置为position,position设置为0,此方法用于准备从缓冲区读取已经写入的数据。
limit() --->返回limit的值。
limit(int limit)---> 设置limit的值
mark() ---> 将mark设置为position.
position() ---> 返回position的值。
position(int pos) --->设置position的值。
remaining() ---> 返回(limit - position)
hasRemainging() --> 若有介于position和limit之间的元素,返回true.
mark---->标记 position ----->位置 limit----> 界限 capacity-->容量
FileInputStream,FileOutputStream 和 RandomAccessFile 和FileChannel的转换
public class GetChannel { private static final int BSIZE = 1024; public static void main(String[] args) throws IOException { FileChannel fc = new FileOutputStream("data.txt").getChannel(); fc.write(ByteBuffer.wrap("Some text".getBytes())); fc.close(); fc = new RandomAccessFile("data.txt","rw").getChannel(); fc.position(fc.size());//move to the end fc.write(ByteBuffer.wrap("Some more".getBytes())); fc.close(); fc = new FileInputStream("data.txt").getChannel(); ByteBuffer buff = ByteBuffer.allocate(BSIZE); fc.read(buff); buff.flip(); while(buff.hasRemaining()) System.out.print((char)buff.get()); } }
使用allocateDirect()提高速度。
public class ChannelCopy { private static final int BSIZE = 1024; /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { System.out.println(args.length); if (args.length != 2) { System.out.println("arguments: sourcefile destfile"); System.exit(1); } System.out.println(args[0]); FileChannel in = new FileInputStream(args[0]).getChannel(); System.out.println(args[1]); FileChannel out = new FileOutputStream(args[1]).getChannel(); ByteBuffer buff = ByteBuffer.allocateDirect(BSIZE); while ((in.read(buff)) != -1) { buff.flip(); out.write(buff); buff.clear(); } } }
使用transferTo/treansferFrom将一个管道和另外一个管道相通,达到上面copy的效果。
public class TransferTo { private static final int BSIZE = 1024; /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { if (args.length != 2) { System.out.println("arguments: sourcefile destfile"); System.exit(1); } System.out.println(args[0]); FileChannel in = new FileInputStream(args[0]).getChannel(); System.out.println(args[1]); FileChannel out = new FileOutputStream(args[1]).getChannel(); ByteBuffer buff = ByteBuffer.allocateDirect(BSIZE); in.transferTo(0, in.size(), out); // or: out.treansferFrom(in,0,in.size()); } }
使用CharBuffer的asCharBuffer()方法读数据:
public class BufferToText { private static final int BSIZE = 1024; /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { FileChannel fc = new FileOutputStream("data2.txt").getChannel(); fc.write(ByteBuffer.wrap("Some Text".getBytes())); fc.close(); fc = new FileInputStream("data2.txt").getChannel(); ByteBuffer buff = ByteBuffer.allocate(BSIZE); fc.read(buff); buff.flip(); System.out.println(buff.asCharBuffer()); System.out.println("-----example 1 end-----"); buff.rewind(); String encoding = System.getProperty("file.encoding"); System.out.println("Decoded using " + encoding + ":" + Charset.forName(encoding).decode(buff)); fc = new FileOutputStream("data2.txt").getChannel(); fc.write(ByteBuffer.wrap("some text".getBytes("UTF-16BE"))); fc.close(); fc = new FileInputStream("data2.txt").getChannel(); buff.clear(); fc.read(buff); buff.flip(); System.out.println(buff.asCharBuffer()); System.out.println("-----example 2 end-----"); fc = new FileOutputStream("data2.txt").getChannel(); buff = ByteBuffer.allocate(18); buff.asCharBuffer().put("Some text"); fc.write(buff); fc.close(); fc = new FileInputStream("data2.txt").getChannel(); buff.clear(); fc.read(buff); buff.flip(); fc.close(); System.out.println(buff.asCharBuffer()); System.out.println("-----example 3 end-----"); } }
转换数据(详解Charset):
public class AvailableCharSets { /** * @param args */ public static void main(String[] args) { SortedMap<String,Charset> charset = Charset.availableCharsets(); Iterator<String> it = charset.keySet().iterator(); while(it.hasNext()) { String csName = it.next(); System.out.print("name:" + csName); Iterator aliase = charset.get(csName).aliases().iterator(); if(aliase.hasNext()) System.out.print(":" + aliase.next()); while(aliase.hasNext()) { System.out.print(":"+aliase.next()); if(aliase.hasNext()) System.out.print(","); } System.out.println(); } } }
get date from bytebuffer:
public class GetData { private static final int BSIZE = 1024; public static void main(String[] args) { ByteBuffer bb = ByteBuffer.allocate(BSIZE); int i = 0; while(i ++<bb.limit()) System.out.print("nonzero"); System.out.println("i = " + i); bb.rewind(); bb.asCharBuffer().put("HowDay"); char c; while((c = bb.getChar()) != 0) { System.out.print(c + " "); } System.out.println(); bb.rewind(); bb.asShortBuffer().put((short)471142); System.out.println(bb.getShort()); bb.rewind(); bb.asIntBuffer().put(99471142); System.out.println(bb.getInt()); bb.rewind(); bb.asLongBuffer().put(99471142); System.out.println(bb.getLong()); bb.rewind(); bb.asFloatBuffer().put(99471142); System.out.println(bb.getFloat()); bb.rewind(); bb.asDoubleBuffer().put(99411147.32); System.out.println(bb.getDouble()); bb.rewind(); } }
使用IntBuffer存储int:
public class InBufferDemo { private static final int BSIZE = 1024; public static void main(String args[]) { ByteBuffer bb = ByteBuffer.allocate(BSIZE); IntBuffer ib = bb.asIntBuffer(); ib.put(new int[]{11,42,47,99,143,811,1016}); System.out.println(ib.get(3)); ib.put(3,1181); System.out.println(ib.get(3)+":"); //set a new limit before rewinding the buffer. ib.flip(); while(ib.hasRemaining()) { int i = ib.get(); System.out.println(i); } } }
byteBuffer转换其他类型buffer:
public class ViewBuffers { private static final int BSIZE = 1024; public static void main(String[] args) { ByteBuffer bb = ByteBuffer.wrap(new byte[]{0,0,0,0,0,0,0,'a'}); bb.rewind(); System.out.println("ByteBuffer"); while(bb.hasRemaining()) { System.out.print(bb.position() + "-->" + bb.get()+ ","); } System.out.println("byte end!"); CharBuffer cb = ((ByteBuffer)bb.rewind()).asCharBuffer(); while(cb.hasRemaining()) { System.out.print(cb.position() + "-->" + cb.get() + ","); } System.out.println("char end!"); FloatBuffer fb = ((ByteBuffer)bb.rewind()).asFloatBuffer(); while(fb.hasRemaining()) { System.out.print(fb.position() + "-->" + fb.get() + ","); } System.out.println("float end!"); IntBuffer ib = ((ByteBuffer)bb.rewind()).asIntBuffer(); while(ib.hasRemaining()) { System.out.print(ib.position() + "-->" + ib.get() + ","); } System.out.println("int end!"); LongBuffer lb = ((ByteBuffer)bb.rewind()).asLongBuffer(); while(lb.hasRemaining()) { System.out.print(lb.position() + "-->" + lb.get() + ","); } System.out.println("Long end!"); ShortBuffer sb = ((ByteBuffer)bb.rewind()).asShortBuffer(); while(sb.hasRemaining()) { System.out.print(sb.position() + "-->" + sb.get() + ","); } System.out.println("Short end!"); DoubleBuffer db = ((ByteBuffer)bb.rewind()).asDoubleBuffer(); while(db.hasRemaining()) { System.out.print(db.position() + "-->" + db.get() + ","); } System.out.println("Double end!"); } }
ByteBuffer默认是以高位优先的形式存储数据的,可以使用ByteOrder.BIG_ENDIAN 或者ByteOrder.LITLE_ENDIAN改变ByteBuffer的字节排序方式,数据在网上传递时,也常常是以高位优先的形式。通过以下程序来改变字节顺序。
public class Endians { public static void main(String[] args) { ByteBuffer bb = ByteBuffer.wrap(new byte[12]); bb.asCharBuffer().put("abcdef"); System.out.println(Arrays.toString(bb.array())); bb.rewind(); bb.order(ByteOrder.BIG_ENDIAN); bb.asCharBuffer().put("abcdef"); System.out.println("ByteOrder.BIG_ENDIAN:" + Arrays.toString(bb.array())); bb.rewind(); bb.order(ByteOrder.LITTLE_ENDIAN); bb.asCharBuffer().put("abcdef"); System.out.println("ByteOrder.LITTLE_ENDIAN:" + Arrays.toString(bb.array())); } }
输出结果:
[0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102]
ByteOrder.BIG_ENDIAN:[0, 97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102]
ByteOrder.LITTLE_ENDIAN:[97, 0, 98, 0, 99, 0, 100, 0, 101, 0, 102, 0]
发表评论
-
日志记录工具类
2012-11-09 15:51 2021import org.apache.log4j.Log ... -
重入锁
2012-02-08 14:18 1200重入锁(ReentrantLock)是一种递归无阻塞的同步机制 ... -
java需要关注的知识点---并发之加入一个新线程
2012-01-03 11:29 916package com.thread; public ... -
java需要关注的知识点---并发之后台线程
2011-12-30 16:07 940所谓的后台线程,是指在程序运行的时候在后台提供一种通用服务的线 ... -
java需要关注的知识点---并发之从任务中产生返回值
2011-12-29 16:04 744class TaskWithResult implemen ... -
java需要关注的知识点---并发之使用Executor
2011-12-29 16:00 974public class CachedthreadPool ... -
java需要关注的知识点---并发之定义任务
2011-12-29 12:53 8131:定义任务: public class LiftOff ... -
java需要关注的知识点---I0之XML的生成
2011-12-27 17:47 961package com.io; import java. ... -
java需要关注的知识点---I0之对象序列化
2011-12-27 10:59 9771。对象序列化: 序列化是什么: 序列化就是将一个对象的状 ... -
java需要关注的知识点---I0之压缩
2011-12-26 15:38 9311.GZIP压缩: public class GZIPPc ... -
java需要关注的知识点--新I0(NIO)之大文件读取
2011-12-22 14:43 2871在读取大文件的时候,采用管道方式进行分流,使用byteBuff ... -
java需要关注的知识点---Charset
2011-12-21 10:25 8821.Charset 名称必须以字母或数字开头。空字符串不是合法 ... -
java需要关注的知识点---I0之获取特殊属性
2011-12-20 17:51 7541.获取文本的编码方式: String encoding ... -
java需要关注的知识点---标准I0流
2011-12-20 11:16 718System.in public class System ... -
java需要关注的知识点---IO流
2011-12-16 17:06 9051.无论何时使用readLine(). ... -
TreeeMap的底层实现
2011-11-28 17:46 1127treeMap插入元素的图解法: 插入前: 插入过程: ... -
java需要关注的知识点---HashSet
2011-11-28 15:20 10581.构造方法: public HashSet() { ... -
java需要关注的知识点---Vector
2011-11-24 17:53 10251.默认初始大小 10. 2.Vector是一个object数 ... -
java需要关注的知识点---LinkedList
2011-11-24 10:19 3271LinkedList是采用双向链表来存储数据: Linked ... -
volatile 修饰符
2011-11-23 16:39 1042volatile修饰符告诉编译程序不要对该变量所参与的操作进行 ...
相关推荐
java-IO流 commons-io-2.11.0.jar
Java IO 是Java编程语言中处理输入/输出流的重要部分,它是连接程序与外部世界的桥梁,允许数据在程序和外部资源之间流动。`commons-io-2.5.jar` 是Apache Commons项目的一部分,它提供了一系列增强和扩展了Java标准...
赠送jar包:commons-io-2.8.0.jar; 赠送原API文档:commons-io-2.8.0-javadoc.jar; 赠送源代码:commons-io-2.8.0-sources.jar; 赠送Maven依赖信息文件:commons-io-2.8.0.pom; 包含翻译后的API文档:commons-io...
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及文件、网络、内存等数据传输。本文将深入探讨Java IO的基本概念、分类、选择流的策略以及常用的流类型。 首先,File类是Java IO的...
本教程将深入讲解如何使用Java Servlet、Apache Commons IO库(版本2.4)以及Apache Commons FileUpload库(版本1.3)来实现这一功能。 一、Apache Commons IO与FileUpload库介绍 Apache Commons IO是一个Java库,...
赠送jar包:commons-io-2.11.0.jar; 赠送原API文档:commons-io-2.11.0-javadoc.jar; 赠送源代码:commons-io-2.11.0-sources.jar; 赠送Maven依赖信息文件:commons-io-2.11.0.pom; 包含翻译后的API文档:...
赠送jar包:commons-io-2.7.jar; 赠送原API文档:commons-io-2.7-javadoc.jar; 赠送源代码:commons-io-2.7-sources.jar; 赠送Maven依赖信息文件:commons-io-2.7.pom; 包含翻译后的API文档:commons-io-2.7-...
标签:commons、io、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
标签:commons、io、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Java高级-----Java-IO系统.ppt
《Java IO流详解与commons-io-1.4.jar库的应用》 在Java编程语言中,IO(Input/Output)流是一组用于数据传输的类,它们允许程序读取和写入数据,无论是从磁盘、网络还是其他输入输出设备。Java的IO流系统是一个...
protoc-gen-grpc-java-1.40.0-osx-aarch_64 mac arm芯片平台grpc生成java的支持。官网上面没有,这是基于源码编译生成的。 pom.xml:(protoc-gen-grpc-java-1.40.0.pom) <?xml version="1.0" encoding="UTF-8"?> ...
下面将详细介绍 `commons-io-2.6.jar` 中的关键知识点。 1. **基本文件操作**: - `FileUtils` 类提供了大量静态方法,用于文件的创建、删除、复制、移动和读写操作。例如,`copyFile()` 和 `moveFile()` 方法可以...
Java知识点总结大全(五) -- io流,关注后面会分享面向对象,io,集合,多线程,网络,sql的总结
Java Commons IO 2.4 是一个广泛使用的Java库,它为处理输入/输出(I/O)操作提供了丰富的功能。这个工具包极大地简化了与文件、流、读写操作、转换、检查和比较相关的任务,使开发者能够更加高效地处理Java中的IO问题...
Apache Commons IO 是一个Java库,专注于提供各种I/O操作的实用工具类,这些操作包括文件、流、过滤器、读写、转换、检测等。在本案例中,我们讨论的是"commons-io-2.4"版本,这个版本包含了完整的Apache Commons IO...
标签:twelvemonkeys、common、io、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,...
Java开发案例-springboot-12-集成socket.io服务端和客户端-源代码+文档.rar Java开发案例-springboot-12-集成socket.io服务端和客户端-源代码+文档.rar Java开发案例-springboot-12-集成socket.io服务端和客户端-源...
java-IO流 commons-io and hutool
本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO流的概念 IO流在Java中分为两大类:输入流(Input Stream)和输出流(Output Stream)。输入流用于从源(如文件、网络连接等)读取数据,而输出流则...