`
JavaSam
  • 浏览: 952137 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA I/O性能优化之性能比较-------MappedBuffer ,Stream

    博客分类:
  • JAVA
 
阅读更多

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.IntBuffer;
import java.nio.channels.FileChannel;


public class compareMappedAndStream {

	private static int numOfInts = 4000000;
	private static int numOfUbuffInts = 2000000;

	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 = {
	/**
	 * 测试Stream写的效率
	 */
	new Tester("Stream Write") {
		@Override
		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") {
		@Override
		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();
		}
	},
	/**
	 * 测试Steam读的效率
	 */
	new Tester("Stream Read") {
		@Override
		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();
		}
	}, 
	/**
	 * 测试Mapped读的效率
	 */
	new Tester("Mapped Read") {
		@Override
		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("Stream Read/Write"){

		@Override
		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"){
		@Override
		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();
			ib.put(0);
			for(int i = 1 ; i < numOfUbuffInts ; i ++){
				ib.put(ib.get(i -1));
			}
			fc.close();
		}
			
		}

	};
	/**
	 * 测试
	 * @param args
	 */
	public static void main(String[] args) {
		for(Tester tester : tests){
			tester.runTest();
		}
	}
}
运行结果:
Stream Write: 0.46
Mapped Write: 0.04
Stream Read: 0.46
Mapped Read: 0.04
Stream Read/Write: 43.14
Mapped Read/Write: 0.04
 
0
0
分享到:
评论

相关推荐

    Java I/O 过滤流-带格式的读写操作

    过滤流(Filter Stream)是Java I/O框架中的一个重要概念,它提供了一种优雅的方式来进行数据的读写操作,同时允许我们添加额外的功能,如字符编码转换、数据压缩等。本篇文章将深入探讨Java I/O中的过滤流,以及...

    Java I/O 第二版

    OReilly.Java.I.O.2nd.Edition.May.2006 Java的io包主要包括: 1. 两种流:字节流(byte Stream)和字符流(character stream),这两种流不存在所谓的谁代替谁、谁比谁高级之说,它们互为补充,只是侧重点不同...

    Java I/O层次结构详解

    - **流(Stream)**:Java I/O中的流分为字节流(Byte Stream)和字符流(Character Stream)。字节流处理单个字节的数据,如InputStream和OutputStream家族;字符流处理Unicode字符,如Reader和Writer家族。 - **...

    java基础之I/O流

    Java中的I/O流是程序与外部数据交互的重要机制,它允许数据在程序、文件、网络等之间流动。I/O流分为两大类:字符流(Character Stream)和字节流(Byte Stream),每类又分为输入流(Input Stream)和输出流...

    Java I/O详细笔记

    ### Java I/O详细笔记 #### 一、流的分类 Java I/O系统主要涉及四种基本的流分类方式:根据数据流动的方向、数据处理的类型、流处理的源以及是否使用了缓冲机制。 **1. 按数据流动方向** - **输入流(Input ...

    rtmp-rtsp-stream-client-java-master.zip

    【rtmp-rtsp-stream-client-java-master.zip】这个压缩包文件是针对安卓平台的一个开源项目,主要用于实现RTMP和RTSP直播推流功能。在Android Studio 3.5及以上版本中开发,它允许用户将手机上的视频内容实时推送到...

    java中I/O的t经典ppt

    在Java中,I/O是通过一系列流(Stream)类来实现的,这些类允许数据从一个源头(如键盘、文件、网络连接)传输到目的地(如显示器、文件、网络)。下面我们将详细探讨Java I/O系统的关键知识点。 1. **流的分类**:...

    accii码表(包括扩展)以及Java I/O

    Java I/O系统还包含过滤流(Filter Stream)、对象流(Object Stream)以及管道流(Piped Stream)等,它们提供了更高级的功能,如数据压缩、错误检测和校验、对象序列化等。了解并熟练掌握这些概念对于任何Java...

    fs-write-stream-atomic-类似`fs.createWriteStream(...)`但是是原子的

    使用`fs-write-stream-atomic`库,开发者可以在保证文件系统操作的原子性的同时,享受Node.js的异步I/O性能,提高了应用程序的可靠性和安全性。这对于处理敏感数据或需要高可用性的服务来说,无疑是一个非常有价值的...

    Java课程设计报告书-学生版-1_I/O流与文件课程设计_

    在Java编程语言中,I/O流(Input/Output Stream)是处理数据输入和输出的核心机制。本课程设计报告书——“Java课程设计报告书-学生版-1_I/O流与文件课程设计_”旨在帮助学生深入理解并掌握如何在Java中进行文件操作...

    Java IO, NIO and NIO.2(Apress,2015)

    Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...

    4本高清中文版Java性能优化经典书籍

    Java性能优化是IT行业中至关重要的一个领域,尤其是在大型企业级应用和互联网服务中,高效的Java代码能够显著提升系统运行效率,降低服务器资源消耗。以下是对这四本经典书籍中的核心知识点的详细介绍: 1. **...

    Android代码-Android rtmp rtsp 推流客户端

    rtmp-rtsp-stream-client-java Library for stream in RTMP and RTSP. All code in Java. If you need a player see this project: https://github.com/pedroSG94/vlc-example-streamplayer Wiki ...

    two-stream-cnn-master MNIST-example

    标题中的"two-stream-cnn-master MNIST-example"指的是一个基于双流卷积神经网络(Two-Stream Convolutional Networks)的MNIST手写数字识别示例项目。MNIST是机器学习领域常用的数据集,用于训练和测试手写数字识别...

    Java IO.pdf

    - **流(Stream)的概念**:Java 的所有输入输出(I/O)设施都是基于流的,流提供了一种简单的方式来读写不同类型的二进制数据。 - **四种主要流类别**: - 字节流(Byte Streams) - 字符流(Character Streams) - 输入...

    java程序性能优化

    Java程序性能优化是Java开发中的重要环节,它旨在提高应用程序的运行效率,减少资源消耗,提升用户体验。在Java世界中,性能优化涵盖了多个层面,包括代码优化、内存管理、线程调度、数据库交互以及JVM参数调整等。...

    Android-rtmp-rtsp-stream-client-java.zip

    Android-rtmp-rtsp-stream-client-java.zip,用于Android的RTMP和RTSP流媒体库。Java中的所有代码,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有...

    前端开源库-file-stream-rotator

    **正文** 前端开源库`file-stream-rotator`是一个专门针对日志管理的工具,它在前端开发中扮演着重要...在大型前端项目中,合理使用日志管理和流旋转技术,对于追踪错误、优化性能以及提升用户体验都具有积极意义。

    Java-NIO2教程

    - **JDK1.0-1.3**: 在此期间,Java的I/O模型主要依赖于传统的阻塞I/O方式,这种模式下,应用程序在等待I/O操作完成时无法执行其他任务,导致效率低下。此外,当时的Java在字符集编码支持、文本处理等方面也有诸多...

Global site tag (gtag.js) - Google Analytics