- 浏览: 3466220 次
- 性别:
- 来自: China
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
读取文件大小:1.45G
第一种,OldIO: (注意文件和系统编码)
public static void oldIOReadFile() throws IOException { BufferedReader br = new BufferedReader(new FileReader("G://lily_947.txt")); PrintWriter pw = new PrintWriter("G://oldIO.tmp"); char[] c = new char[100*1024*1024]; while(br.read(c) != -1){ pw.print(c); } pw.close(); br.close(); }
耗时70.79s
第二种,newIO:
- public static void newIOReadFile() throws IOException{
- FileChannel read = new RandomAccessFile("G://lily_947.txt","r").getChannel();
- FileChannel writer = new RandomAccessFile("G://newIO.tmp","rw").getChannel();
- ByteBuffer bb = ByteBuffer.allocate(200*1024*1024);
- while(read.read(bb)!=-1){
- bb.flip();
- writer.write(bb);
- bb.clear();
- }
- read.close();
- writer.close();
- }
耗时47.24s
第三种,RandomAccessFile:
- public static void randomReadFile() throws IOException{
- RandomAccessFile read = new RandomAccessFile("G://lily_947.txt","r");
- RandomAccessFile writer = new RandomAccessFile("G://random.tmp","rw");
- byte[] b = new byte[200*1024*1024];
- while(read.read(b)!=-1){
- writer.write(b);
- }
- writer.close();
- read.close();
- }
耗时46.65
第四种,MappedByteBuffer:
- public static void mappedBuffer() throws IOException{
- FileChannel read = new FileInputStream("G://lily_947.txt").getChannel();
- FileChannel writer = new RandomAccessFile("G://buffer.tmp","rw").getChannel();
- long i = 0;
- long size = read.size()/30;
- ByteBuffer bb,cc = null;
- while(i<read.size()&&(read.size()-i)>size){
- bb = read.map(FileChannel.MapMode.READ_ONLY, i, size);
- cc = writer.map(FileChannel.MapMode.READ_WRITE, i, size);
- cc.put(bb);
- i+=size;
- bb.clear();
- cc.clear();
- }
- bb = read.map(FileChannel.MapMode.READ_ONLY, i, read.size()-i);
- cc.put(bb);
- bb.clear();
- cc.clear();
- read.close();
- writer.close();
- }
耗时:36
前三种读法对应的资源占用图如下:
相对于最后一种内存直接映射方式前面的测试其实无意义,基本秒杀。。。。。
对于很大的文件直接分块映射时内存会不够,这是因为MappedByteBuffer未被释放造成的,sun未提供直接回收MappedByteBuffer区域的方法,这个时候有两种方法解决,第一种比较愚笨的:
- System.gc();
- System.runFinalization();
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
第二种网上找来的,利用反射调用clean方法:
- public static void unmap(final MappedByteBuffer buffer) {
- if (buffer == null) {
- return;
- }
- AccessController.doPrivileged(new PrivilegedAction<Object>() {
- public Object run() {
- try {
- Method getCleanerMethod = buffer.getClass().getMethod("cleaner", new Class[0]);
- if (getCleanerMethod != null) {
- getCleanerMethod.setAccessible(true);
- Object cleaner = getCleanerMethod.invoke(buffer, new Object[0]);
- Method cleanMethod = cleaner.getClass().getMethod("clean", new Class[0]);
- if (cleanMethod != null) {
- cleanMethod.invoke(cleaner, new Object[0]);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
- });
- }
以上两种方法感觉都别扭,还有就是可以自己分割成物理文件再循环调用,这个也不太美观。
速度也会减慢好多。
感谢:http://aronlulu.iteye.com/blog/1018370#comments
发表评论
-
java正则表达式修改html标签中属性
2013-04-21 11:45 4876package com.ez; import ... -
String.intern()解析
2012-07-16 22:53 1628String.intern()解析 Str ... -
Java中的访问控制public,private,protected,package
2012-05-08 02:41 28701. Java中的访问控制表1-1 可见/ ... -
Beginning SWT
2012-04-12 15:41 0SWT(Standard Widget Toolkit, ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-03-13 17:25 1369最近的机器内存又爆满了,除了新增机器内存外,还应该好好r ... -
复习nio
2012-03-13 17:24 1785简介: JDK 1.4 中引入的新输入输出 (NIO) 库在 ... -
The Closeable, Flushable, Readable, and Appendable interfaces
2012-03-13 17:23 1915Java SE 5.0引入了4个附加的接口:C ... -
Java IO复习
2012-03-13 17:22 1437什么是流: 流是一个抽象的概念。当Java程序需要 ... -
java模拟spring ioc
2011-12-08 17:21 2257<?xml version="1.0&q ... -
javaweb读取任意目录的下的properties配置文件(解决普通java类读web-inf下任意目录)
2011-10-28 15:59 11940看到很多用getResourcesAsStream()来读取. ... -
java程序员常用英语
2011-11-14 08:16 5632干程序员这行实在是 ... -
Oracle在2011年取得的Java主要成就
2011-10-20 08:29 2059甲骨文公司继续推动Java前进的战略。自2010年1月收购 ... -
Java规则引擎与其API(JSR-94)
2011-10-19 10:02 4251转自:http://www.ibm.com/developer ... -
Core Java , Volume 1 笔记
2011-07-17 11:36 051 StringBuffer:效率略低于String ... -
树形显示
2011-07-17 11:26 1681/** 树形结构应用十分广泛。 下面这段代码根据 ... -
求能除尽1至n的最小整数
2011-07-16 02:43 4021为什么1小时有60分钟,而不是100分钟呢?这是历史上的 ... -
java 四则运算 栈的实现
2011-07-15 13:42 13900import java.util.Stack; /* ... -
java的中文转拼音组件---pinyin4j的使用
2011-07-02 19:09 2335pinyin4j是一个功能强悍的汉语拼音工具包,主要是从汉语获 ... -
【code】java的中文转拼音工具类
2011-07-01 09:26 3782package my; public class ... -
Java随机数详解
2011-05-14 19:57 0Java随机数详解新手晋级 方法1(数据 ...
相关推荐
### Java IO流几种经典使用方式 #### 一、输入输出流(Input/Output Stream) 在Java中,`java.io`包提供了处理输入/输出操作的基本类,主要包括`InputStream`和`OutputStream`。 ##### 1. 字节流(Byte Stream) **...
使用 Java 实现对 dbf 文件的简单读写需要使用以下几个类: 1. DBFWriter:用于 dbf 文件的写操作,提供了写入 dbf 文件的方法。 2. JDBField:用于表示 dbf 文件中的字段信息,包括字段名、字段类型、字段长度等。...
- **Java IO**:采用流(Stream)的方式进行数据读写,数据以字节流或字符流的形式进行传输。 - **Java NIO**:采用缓冲区(Buffer)的方式进行数据读写。所有的数据都会先加载到缓冲区中,再通过通道(Channel)进行读写...
7. **NIO(New IO)**:从Java 1.4开始引入,NIO提供了一种非阻塞的I/O模型,适合高并发和大容量数据传输场景。关键组件包括选择器(Selector)、通道(Channel)和缓冲区(Buffer)。 8. **文件系统操作**:Java还提供了...
文件读取操作是 java IO 操作的基础,主要有以下几种方式: 1. 按字节读取文件内容:以字节为单位读取文件内容,常用于读取二进制文件。 2. 按字符读取文件内容:以字符为单位读取文件内容,常用于读取文本、数字等...
Java IO系统提供了以下几种转换流: - `InputStreamReader`:将字节流转换为字符流。 - `OutputStreamWriter`:将字符流转换为字节流。 #### 6. 过滤器流 过滤器流是在原有流的基础上添加额外功能的流,它可以对...
### Java IO 流详解 #### 一、Java IO 流概念及作用 Java IO(Input/Output)流是Java编程语言中的一个重要组成部分,主要用于...无论是简单的文件读写还是复杂的网络通信,Java IO流都能提供灵活且高效的解决方案。
### 常见几种IO操作 #### 1. 文件IO - **FileInputStream/FileOutputStream**:用于处理文件的字节流读写。 - **FileReader/FileWriter**:用于处理文件的字符流读写。 - **BufferedReader/BufferedWriter**:提供...
Java IO的基本概念之一是流,它是一种数据传输的方式。Java中的流被抽象成一系列连续的数据元素,这些数据元素可以是字节或字符。流分为两种基本类型:输入流和输出流。输入流是从外部源读取数据到程序,而输出流则...
Java提供了多种方式来读取文件内容,主要分为以下几种: - **按字节读取**:适用于读取二进制文件,如图片、音频或视频文件。使用`FileInputStream`类,通过`read()`方法一次读取一个字节,或一次读取多个字节到...
Java中的IO流主要分为输入流和输出流两大类,每类又可以根据数据处理方式的不同细分为多种具体实现。本知识点将深入探讨Java IO流的相关细节,包括节点流与处理流的概念,以及文件流、标准输入输出流、缓冲流、转换...
首先,我们需要理解Java中的几个关键类,如`java.io.File`、`java.io.FileReader`、`java.io.FileWriter`、`java.io.BufferedReader`和`java.io.BufferedWriter`,它们在文件操作中起着核心作用。 `File`类是Java中...
本文将详细介绍几种常见的Java文件读写方式,包括按行读取和写入、随机读取以及按字节读取。 1. **按行读取和写入** 在Java中,我们可以使用`BufferedReader`和`PrintWriter`类来实现按行读取和写入文件。`...
### Java流(文件读写操作) #### 一、流的分类 Java中处理文件和数据时,使用流的概念来进行操作。根据不同的标准,流可以分为几种类型。 ##### 1. 按数据流动方向 - **输入流**:主要用于从数据源读取数据。输入...
Java IO、NIO以及NIO.2是Java中用于处理输入/输出操作的三种主要机制。本书《Java IO, NIO and NIO.2》旨在深入浅出地介绍这些机制,同时书中内容均为英文。接下来将详细介绍这些知识点。 **Java IO** Java IO是...
Java IO(输入/输出)是Java编程语言中的一个重要部分,用于处理各种数据流,包括从文件、网络、设备等读取数据以及向这些地方写入数据。本案例将深入探讨Java IO流的基本概念、主要类库及其在实际编程中的应用。 ...
- **PrintWriter**:`java.io.PrintWriter`提供了一种方便的方式来写入文本,支持自动换行。 ```java File file = new File("path_to_output_file"); PrintWriter writer = new PrintWriter(file); writer....
java基础中的IO流是Java提供的一套用于文件读写操作的流式API,它包括字节流和字符流两种基本类型。字节流主要用在处理二进制数据,而字符流则是处理文本数据。 首先,文档中提到了`File`类,它是IO流操作中用于...