- 浏览: 112950 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (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把文件分成一段段的进行读写。
生成大文件 :
读文件:
采用NI0可以加快文件的读取速度!
生成大文件 :
public class ProductionFile { private static void productFile() throws FileNotFoundException { File file = new File("D://larger.txt"); PrintWriter pw = new PrintWriter(file); try{ for (int i = 0;i<1024;i++) { for (int j = 0;j <1024;j++){ for(int k = 0;k<1024;i++){ pw.write(i+":" +j); } pw.flush(); } pw.flush(); } }finally{ pw.close(); } } public static void main(String[] args) { try { productFile(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
读文件:
public class LargeMappedFiles { static int length = 0x300000; /** * @param args * @throws IOException * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException, IOException { File file = new File("D://larger.txt"); FileChannel fileChannel = new RandomAccessFile(file, "rw") .getChannel(); /** * map(FileChannel.MapMode mode,long position, long size) mode - * 根据是按只读、读取/写入或专用(写入时拷贝)来映射文件,分别为 FileChannel.MapMode 类中所定义的 * READ_ONLY、READ_WRITE 或 PRIVATE 之一 position - 文件中的位置,映射区域从此位置开始;必须为非负数 * size - 要映射的区域大小;必须为非负数且不大于 Integer.MAX_VALUE * 所以若想读取文件后半部分内容,如例子所写;若想读取文本后1 * /8内容,需要这样写map(FileChannel.MapMode.READ_ONLY, * f.length()*7/8,f.length()/8) * 想读取文件所有内容,需要这样写map(FileChannel.MapMode.READ_ONLY, 0,f.length()) */ MappedByteBuffer inputBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, file.length()/40); long start = System.currentTimeMillis(); byte[] dst = new byte[length]; System.out.println("File size:" + inputBuffer.capacity()); for( int offSet = 0; offSet<inputBuffer.capacity(); offSet += length) { if(inputBuffer.capacity() - offSet > length) { for (int i = 0 ; i < length ; i++) { dst[i] = inputBuffer.get(offSet + i ); if (i == 10) System.out.println("i:" + i+ " Value-->"+new String(dst,0, 40)+ " " ); } }else { for (int i = 0 ; i< inputBuffer.capacity() - offSet; i++) { byte b = inputBuffer.get(offSet + i ); } } } long end = System.currentTimeMillis(); System.out.println("Value-->"+new String(dst, 9990, 10000)+ " " ); System.out.println(end -start ); // System.out.println(bb.get(count-10)); } }
采用NI0可以加快文件的读取速度!
public class MappedIO { private static int numOfInts = 4000000; private static int numberOfUbuffInts = 200000; private abstract static class Tester{ private String name; public Tester(String name) { this.name = name; } public void runTest() { System.out.print(name + ":"); try{ long start = System.nanoTime(); test(); double duration = System.nanoTime() - start; System.out.format("%.2f\n",duration/1.0e9); }catch(IOException e){ throw new RuntimeException(e); } } public abstract void test() throws IOException; } private static Tester[] tests = { new Tester("Stream Write") { public void test() throws IOException { DataOutputStream dos = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(new File( "temp.temp")))); for(int i = 0 ;i<numOfInts ;i++){ dos.writeInt(i); } dos.close(); } }, new Tester("Mapped Write") { public void test() throws IOException { FileChannel fc = new RandomAccessFile("temp.temp", "rw").getChannel(); IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size()).asIntBuffer(); for(int i = 0; i<numOfInts; i++) ib.put(i); fc.close(); } }, new Tester("Stream Reader") { public void test() throws IOException { DataInputStream dis = new DataInputStream(new BufferedInputStream( new FileInputStream(new File("temp.temp")))); for (int i = 0; i<numOfInts; i++) { dis.readInt(); } dis.close(); } } , new Tester("Mapped Reader") { public void test() throws IOException { FileChannel fc = new RandomAccessFile("temp.temp","rw").getChannel(); IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size()).asIntBuffer(); while(ib.hasRemaining()) { ib.get(); } fc.close(); } }, new Tester("Stream Writer Reader") { public void test() throws IOException { RandomAccessFile raf = new RandomAccessFile(new File("temp.temp"),"rw"); raf.writeInt(1); for(int i = 0; i<numberOfUbuffInts; i++){ raf.seek(raf.length()-4); raf.writeInt(raf.readInt()); } raf.close(); } }, new Tester("Mapped Writer/Reader") { public void test() throws IOException { FileChannel fc = new RandomAccessFile(new File("temp.temp"), "rw").getChannel(); IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size()).asIntBuffer(); ib.put(0); for(int i=1;i<numberOfUbuffInts;i++) { ib.put(ib.get(i-1)); } fc.close(); } } }; public static void main(String args[]) throws IOException { for (Tester test:tests) { test.runTest(); } } }
发表评论
-
日志记录工具类
2012-11-09 15:51 2024import org.apache.log4j.Log ... -
重入锁
2012-02-08 14:18 1207重入锁(ReentrantLock)是一种递归无阻塞的同步机制 ... -
java需要关注的知识点---并发之加入一个新线程
2012-01-03 11:29 921package com.thread; public ... -
java需要关注的知识点---并发之后台线程
2011-12-30 16:07 947所谓的后台线程,是指在程序运行的时候在后台提供一种通用服务的线 ... -
java需要关注的知识点---并发之从任务中产生返回值
2011-12-29 16:04 746class TaskWithResult implemen ... -
java需要关注的知识点---并发之使用Executor
2011-12-29 16:00 980public class CachedthreadPool ... -
java需要关注的知识点---并发之定义任务
2011-12-29 12:53 8191:定义任务: public class LiftOff ... -
java需要关注的知识点---I0之XML的生成
2011-12-27 17:47 968package com.io; import java. ... -
java需要关注的知识点---I0之对象序列化
2011-12-27 10:59 9821。对象序列化: 序列化是什么: 序列化就是将一个对象的状 ... -
java需要关注的知识点---I0之压缩
2011-12-26 15:38 9371.GZIP压缩: public class GZIPPc ... -
java需要关注的知识点---Charset
2011-12-21 10:25 8881.Charset 名称必须以字母或数字开头。空字符串不是合法 ... -
java需要关注的知识点---I0之获取特殊属性
2011-12-20 17:51 7561.获取文本的编码方式: String encoding ... -
java需要关注的知识点---I0之新IO(NI0)
2011-12-20 15:40 1204缓冲器操纵数据: ByteBuffer是数据移进移出通道的唯一 ... -
java需要关注的知识点---标准I0流
2011-12-20 11:16 725System.in public class System ... -
java需要关注的知识点---IO流
2011-12-16 17:06 9081.无论何时使用readLine(). ... -
TreeeMap的底层实现
2011-11-28 17:46 1132treeMap插入元素的图解法: 插入前: 插入过程: ... -
java需要关注的知识点---HashSet
2011-11-28 15:20 10641.构造方法: public HashSet() { ... -
java需要关注的知识点---Vector
2011-11-24 17:53 10301.默认初始大小 10. 2.Vector是一个object数 ... -
java需要关注的知识点---LinkedList
2011-11-24 10:19 3280LinkedList是采用双向链表来存储数据: Linked ... -
volatile 修饰符
2011-11-23 16:39 1045volatile修饰符告诉编译程序不要对该变量所参与的操作进行 ...
相关推荐
### Java NIO 处理超大数据文件的知识点详解 #### 一、Java NIO简介 Java NIO(New IO)是Java平台上的新输入/输出流API,它提供了与传统IO(即Java IO)不同的数据处理方式。NIO在Java 1.4版本引入,并在后续版本...
本项目“Large-File-Processing-master_javanio_java大文件处理_”显然专注于通过Java NIO实现大文件处理,下面我们将详细探讨相关的知识点。 1. **Java NIO基础**:NIO的核心组件包括通道(Channels)、缓冲区...
Java读取大文件的处理是Java编程中的一项重要技术,特别是在处理大文件时需要注意性能和响应速度。下面我们将对Java读取大文件的处理技术进行详细的介绍。 标题解释 Java读取大文件的处理是指使用Java语言来读取大...
理解Java NIO中的`ByteBuffer`涉及以下关键知识点: 1. **通道(Channels)**:通道是数据的来源或目的地,如文件通道、套接字通道等。它们可以与缓冲区交互,读取或写入数据。 2. **选择器(Selectors)**:选择...
### Java-NIO2教程知识点详解 #### I/O发展简史 - **JDK1.0-1.3**: 在此期间,Java的I/O模型主要依赖于传统的阻塞I/O方式,这种模式下,应用程序在等待I/O操作完成时无法执行其他任务,导致效率低下。此外,当时的...
总结一下,这个压缩包中的文件涵盖了以下Java NIO关键知识点: 1. 通道(Channel):如FileChannel,用于连接到I/O源和目的地。 2. 缓冲区(Buffer):如ByteBuffer和FloatBuffer,作为数据的临时存储区域,支持...
根据给定文件的信息,我们可以总结出以下几个关键的Java知识点: ### 1. 文件操作 #### 1.1 文件读取 在Java中,文件读取是通过`java.io`包中的类来实现的。本例中用到了`BufferedReader`和`FileReader`。 - **...
在Java编程中,读取文件、对数据进行排序并重新写入文件是常见的操作,尤其在数据处理和分析场景中。下面将详细讲解这个过程,包括相关知识点和具体实现。 首先,我们需要导入Java的`java.io`包,该包包含了处理...
Java NIO(Non-blocking Input/Output)是一种在Java中处理I/O操作的新方式,相比于传统的BIO( Blocking I/O),NIO提供了更高效的数据传输能力,尤其在处理大量并发连接时。NIO的核心概念包括通道(Channels)、...
Java NIO(New Input/Output)是Java在JDK 1.4中引入的新I/O机制,旨在提高I/O操作的性能。NIO基于缓冲区(Buffers)、通道(Channels)、选择器(Selectors)等概念。 缓冲区是NIO中一个核心概念,它是一个对象,...
### 主题JAVANIO简介知识点 #### 一、基本概念与Java标准IO回顾 **基本概念** 在计算机科学中,I/O(Input/Output,输入/输出)是指主存和外部设备(如硬盘、终端、网络等)之间拷贝数据的过程。I/O操作是操作...
### Java NIO 系列教程知识点详解 #### 一、Java NIO 概述 Java NIO (New IO) 是 Java SE 1.4 版本引入的一种新的输入/输出方式,它提供了一种替代传统的 Java IO 包的方式。Java NIO 主要包括三个核心组成部分:*...
### Java NIO 详细教程知识点解析 #### 一、Java NIO 概述 Java NIO(New IO)是Java平台提供的一种新的IO操作模式,它首次出现在Java 1.4版本中,并在后续版本中不断完善。Java NIO 的设计目的是为了克服传统Java ...