`

不同方式读写文件的性能比较

DOS 
阅读更多

注:bufferedRead读写的速度最快

package com.test;

import java.io.*;
import java.nio.*;
import java.nio.channels.*;

public class Test {
	private static int numOfInts = 4000000;

	private static int numOfUbuffInts = 200000;

	private abstract static class Tester {
		private String name;

		public Tester(String name) {
			this.name = name;
		}

		public long runTest() {
			System.out.print(name + ":   ");
			try {
				long startTime = System.currentTimeMillis();
				test();
				long endTime = System.currentTimeMillis();
				return (endTime - startTime);
			} 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.tmp"))));
			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.tmp", "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   Read") {
		
		public void test() throws IOException {
			DataInputStream dis = new DataInputStream(new BufferedInputStream(
					new FileInputStream("temp.tmp")));
			for (int i = 0; i < numOfInts; i++)
				dis.readInt();
			dis.close();
		}
	}, new Tester("Mapped   Read") {
		public void test() throws IOException {
			FileChannel fc = new FileInputStream(new File("temp.tmp"))
					.getChannel();
			IntBuffer ib = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size())
					.asIntBuffer();
			while (ib.hasRemaining())
				ib.get();
			fc.close();
		}
	}, new Tester("BufferReader   Read") {
		public void test() throws IOException {
			File file = new File("temp.tmp");
			InputStreamReader read = new InputStreamReader(
			new FileInputStream(file), "UTF-8");
			BufferedReader reader = new BufferedReader(read);
			String line;
			while ((line = reader.readLine()) != null){
				
			}
			read.close();
		}
	}, new Tester("Stream   Read/Write") {
		public void test() throws IOException {
			RandomAccessFile raf = new RandomAccessFile(new File("temp.tmp"),
					"rw");
			raf.writeInt(1);
			for (int i = 0; i < numOfUbuffInts; i++) {
				raf.seek(raf.length() - 4);
				raf.writeInt(raf.readInt());
			}
			raf.close();
		}
	}, new Tester("Mapped   Read/Write") {
		public void test() throws IOException {
			FileChannel fc = new RandomAccessFile(new File("temp.tmp"), "rw")
					.getChannel();
			IntBuffer ib = fc.map(FileChannel.MapMode.READ_WRITE, 0, fc.size())
					.asIntBuffer();
			ib.put(0);
			for (int i = 1; i < numOfUbuffInts; i++)
				ib.put(ib.get(i - 1));
			fc.close();
		}
	} };

	public static void main(String[] args) {
		for (int i = 0; i < tests.length; i++)
			System.out.println(tests[i].runTest());
	}
 
分享到:
评论

相关推荐

    VC++ 文件不同方式读写

    本主题将深入探讨六种不同的文件读写方法,适用于处理文本文件(如.txt格式)。以下是对每种方法的详细说明: 1. **标准库函数**: 使用C++的标准库函数`fstream`进行文件读写是最常见的方式。`ifstream`用于读取...

    Android 读写文件实例

    在Android平台上,对文件进行读写操作是应用程序中常见的需求,比如存储用户数据、缓存信息或者媒体资源。本文将详细讲解如何在Android系统中进行SD卡和内部存储的读写,以及如何获取文件目录。 ### 1. Android权限...

    Java 中对文件的读写操作之比较

    随着Java的发展,不同版本提供了多种方式来处理文件读写,这使得开发者可以根据实际需求选择最合适的方法。本文将重点探讨Java在不同版本中所提供的文件读写方式,并对其进行对比分析。 #### 一、JDK 1.0 中的文件...

    Python中使用asyncio 封装文件读写

    通过使用`asyncio.Future`对象来封装文件的异步读写,我们能够有效地提高文件处理的性能,尤其是在处理大量文件或需要并发执行多个文件读写操作的情况下。这种方式不仅能够提升程序的整体响应速度,还能充分利用硬件...

    文件读写监控工具文件读写监控工具文件读写监控工具

    文件读写监控工具是计算机系统管理和维护中不可或缺的软件,它们可以帮助用户跟踪、记录和分析系统中的文件操作,包括打开、创建、修改、删除等动作。这类工具在故障排查、性能优化、安全审计等方面有着广泛的应用。...

    易语言大文件读写模块

    这可能涉及到对文件内容的搜索、比较和过滤。实现时,模块可能会使用二分查找、索引或者其他高效的搜索算法来提高查询速度。 在“易语言大文件读写模块源码”这个压缩包中,包含了这个模块的源代码。源码是理解模块...

    mfc操作读写文件

    同时,对于大文件或复杂数据结构,可能需要分块读写,避免一次性加载整个文件到内存,以优化性能。 总之,MFC的CFile和CArchive类为C++程序员提供了强大而灵活的文件操作工具,无论是简单的文本写入还是复杂的对象...

    多线程通信读写文件

    特别是在处理大量数据时,如读写文件,多线程可以同时执行不同的任务,从而显著提高整体性能。本项目着重探讨如何在多线程环境中实现安全有效的文件读写操作。 首先,我们需要理解多线程的基本概念。在单核处理器...

    大文件读写内存映射.rar

    这种方式减少了I/O操作,提高了文件处理的性能,并降低了CPU的负担。 首先,我们来理解内存映射的基本原理。在操作系统层面,内存映射是通过创建一个映射文件的内存区域来实现的。这个区域可以是连续的,也可以是...

    异步读写文件测试.rar_异步读写_文件 读写_文件异步读写_文件读写_读写异步

    这个名为"异步读写文件测试.rar"的压缩包包含了一个用于测试异步读写速度的程序,以及相关的测试报告,对于初学者或者开发者来说,是一个很好的学习和研究资源。 异步读写的核心理念在于,当程序执行读写操作时,它...

    文件同步与异步读写

    文件同步与异步读写是计算机编程中两个关键的概念,主要涉及到I/O操作,尤其是在处理大量数据时。本文将深入探讨这两个概念,并结合提供的VC6.0和VS2005下的实例进行分析。 首先,让我们理解同步和异步读写的基本...

    Linux Windows C++读写ini文件

    总的来说,无论是Linux还是Windows,C++都可以通过不同的方法处理ini文件。选择哪种方法取决于项目需求,如跨平台性、性能、易用性和内存消耗等因素。在实际开发中,推荐使用已有的成熟库,以减少错误和提高代码质量...

    DBF读写文件 C++

    我们将基于提供的"DBF读写文件 C++ 查找"这一主题,通过分析描述中的"一次查找一个"和"一次查找多个"功能,来讲解相关技术细节。 首先,理解DBF文件结构是实现读写操作的基础。DBF文件由头部信息、字段定义和记录...

    delphi 文件读写

    同时,确保文件操作的安全性,例如在读写文件前检查权限,防止数据丢失或损坏。 通过以上内容,你应该对Delphi中的文本文件读写有了基本的理解。继续学习Delphi的高级特性,如内存映射文件、异步I/O等,可以帮助你...

    Java读写文件API的用法指南,性能分析与对比。

    本指南将深入探讨Java中的文件读写API,包括常用的方法、性能分析以及不同方式之间的对比。以下是对相关知识点的详细说明: 1. **File类**: Java中的`java.io.File`类是文件和目录路径名的抽象表示形式。它提供了...

    C++读写ini配置文件

    本文将深入探讨如何使用C++来读写ini配置文件,主要参考提供的"rwconfig.cpp"和"rwconfig.h"源代码。 首先,我们需要了解ini文件的基本结构。它由一系列节(Section)组成,每个节内包含若干键值对(Key-Value ...

    多线程文件读写测试

    在多线程编程中,通过并发读写文件,可以显著提高整体的处理速度,特别是在现代多核处理器上。然而,这也带来了同步和竞态条件的问题,需要精心设计以确保正确性和性能。 描述中提到的“源代码来源于网络”,意味着...

    C#文件读写操作

    在C#编程语言中,文件读写操作是基础且至关重要的功能,允许程序与本地文件系统交互。本文将深入探讨如何在C#中执行文件的读写操作,以及如何进行文件删除。 首先,让我们了解C#中用于文件操作的主要类:`System.IO...

    文件读写 文件读写文件读写 文件读写

    - .NET框架中的`FileStream`类,支持读写文件。 4. 缓冲机制: - 缓冲区可以减少频繁的磁盘I/O操作,提高性能。 - C++和Java中的缓冲流类,如`BufferedInputStream`、`BufferedOutputStream`、`BufferedReader`...

    csv文件读写操作

    在MFC(Microsoft Foundation Classes)环境下,利用Visual Studio 2015进行CSV文件的读写操作,可以方便地处理这类数据。本文将详细介绍如何在VS2015的MFC项目中实现CSV文件的读写功能。 1. **CSV文件结构** CSV...

Global site tag (gtag.js) - Google Analytics