0 0

java文件io性能测试疑问5

1 使用file reader测试随机io时间。
实验非预期结果:
a 当我修改了small.txt文件内容时,下一个循环依然是旧的内容,new,read操作读的是缓存??
b 当只执行一次read操作时,执行时间不足1ms,比想象中的快。据说磁盘寻道时间需要几毫秒??

@Test
	public void testSeek() throws IOException {
		int num = 100;
		char[] cbuf = new char[12 * 10];
		long start = System.currentTimeMillis();
		for (int i = 0; i < num; i++) {
			FileReader fr = new FileReader("small.txt");
			// System.out.println(System.currentTimeMillis() - start);

			fr.read(cbuf);
			fr.close();

			System.out.println(new String(cbuf).toString());

		}

		System.out.println(System.currentTimeMillis() - start);

	}

有人能回答我的问题吗

问题补充:我试了一下,FileInputStream,执行时间依然是0毫秒

		byte[] buf = new byte[10];
		long start = System.currentTimeMillis();
	
		FileInputStream fr = new FileInputStream("E:\\hadoop-0.20.203.0rc1.tar.gz");
		
		fr.read(buf);
		// fr.read();
		fr.close();

		

		System.out.println(System.currentTimeMillis() - start);

chen_yongkai 写道
FileReader 继承自InputStreamReader

引用

Each invocation of one of an InputStreamReader's read() methods may
* cause one or more bytes to be read from the underlying byte-input stream.
* To enable the efficient conversion of bytes to characters, more bytes may
* be read ahead from the underlying stream than are necessary to satisfy the
* current read operation.


InputStreamReader自带缓存
2012年3月12日 19:57

3个答案 按时间排序 按投票排序

0 0

采纳的答案

IO操作,磁盘的内容不是直接到java用户的进程中的,这样的话就太慢了。
当java进程请求IO操作的时候,它执行调用把控制权交给内核,内核先会看内核空间的缓冲区内有没有数据,有就直接读出来,没有的话就调用磁盘控制器去磁盘读取数据,读取会先读取到内核空间,然后再到用户进程中。内核这部分操作显然是java api调用native本地方法(也就是C语言或者C++)。
这是一些操作系统的知识,LZ可以参考一下Reilly的java nio那本书,上面阐述的很详细。

2012年3月12日 20:38
0 0

我测试了一下,第一次读一个新文件时确实是10ms~40ms,再次执行就0毫秒了;
估计是受磁盘预读和系统缓存的影响。
http://simpleframework.net/blog/v/8486.html

2012年3月12日 22:25
0 0

FileReader 继承自InputStreamReader

引用

Each invocation of one of an InputStreamReader's read() methods may
* cause one or more bytes to be read from the underlying byte-input stream.
* To enable the efficient conversion of bytes to characters, more bytes may
* be read ahead from the underlying stream than are necessary to satisfy the
* current read operation.


InputStreamReader自带缓存

2012年3月12日 20:15

相关推荐

    java nio与io性能测试

    本文将深入探讨Java NIO与IO的性能测试,并通过代码实例来展示它们之间的差异。 首先,我们来看传统的Java IO模型。IO模型基于流,数据是从输入流到输出流的单向传输。例如,`FileInputStream`和`FileOutputStream`...

    Java中文件IO流.pdf

    Java 中文件 IO 流 Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写操作。文件流是指在程序中用于文件输入输出的对象, Java 中提供了多种文件流类型,包括 InputStream ...

    java 使用IO流实现文件的复制

    IO(Input/Output)流是Java提供的一种处理输入输出数据的方式,包括读取和写入文件。本篇文章将详细介绍如何使用Java的IO流来实现文件的复制。 首先,我们需要了解Java中的IO流体系。Java的IO库基于流的概念,流...

    Java简单的文件IO程序

    Java文件输入输出(IO)是Java编程中一个基础且重要的概念,它允许程序与外部存储设备进行数据交换。在这个主题中,我们将深入探讨Java如何执行简单的文件读写和追加操作。 首先,Java中的文件IO操作主要依赖于`...

    java新IO文件流

    java新IO文件流java新IO文件流java新IO文件流java新IO文件流java新IO文件流java新IO文件流java新IO文件流

    java IO教程,java IO教程,java IO教程

    java IO教程,java IO教程,java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程java IO教程java IO教程java IO教程java IO教程,java IO教程,java IO教程,java IO教程,java IO...

    Java IO 基础操作(文件读写和移动)

    在Java编程语言中,输入/输出(IO)是处理数据传输的核心部分,特别是在与文件系统交互时。本文将深入探讨Java中的基本文件操作,包括文件的移动、读写以及文本文件的读写。 首先,让我们从文件操作开始。在Java中...

    Java NIO与IO性能对比分析.pdf

    本文将分析Java NIO与Java IO在性能上的对比,并尝试找出性能差异的原因,以及探讨哪种编程模型更适合高并发的应用场景。 Java IO模型是一种阻塞型I/O模型,在数据的读写过程中,如果线程在等待数据,将会一直被挂...

    java.io.CharConversionException: isHexDigit处理

    Java.io.CharConversionException: isHexDigit 处理详解 Java.io.CharConversionException: isHexDigit 是 Java 中一种常见的异常,通常发生在传输数据时编码不正确或 URL 传值时出现问题。本文将对该异常进行详细...

    java io读取文件

    在Java编程语言中,`IO`(Input/Output)是处理数据输入和输出的核心部分,尤其是在处理大数据量文件时显得尤为重要。Java IO API提供了一系列类和接口,使得开发者能够高效地读取、写入和操作文件。下面我们将深入...

    java_io.rar_java 文件操作_java 读取 本地文件_java.io转动_文件操作

    本资源“java_io.rar”提供了关于如何在Java中进行文件操作的示例代码,包括读取、移动、删除和复制文件等常见任务。我们将深入探讨这些主题,以便更好地理解Java I/O API的使用。 首先,让我们从读取本地文件开始...

    java.io.Reader 和 java.io.InputStream 的区别

    ### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....

    Java基于IO流读取文件的方法

    Java IO流分为字符流和字节流,适用于不同类型的文件和数据源。本文将深入探讨如何使用IO流来读取文件,并通过实例代码详细解释每一个步骤。 首先,要读取一个文件,我们需要获取文件的路径。在给定的示例中,路径...

    Java-Io流,练习

    Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...

    利用缓冲区提高Java应用程序的IO性能

    ### 利用缓冲区提高Java应用程序的IO性能 #### 摘要与背景介绍 Java作为一门具有跨平台特性的编程语言,在多个领域都获得了广泛的应用。随着Java应用的不断扩展,其性能问题逐渐成为人们关注的重点,尤其是输入...

    java io 文件读写

    java io 文件读写

    Java IO 性能优化

    ### Java IO性能优化 #### 4.1 基本IO操作 在Java开发中,`java.io`包是处理输入输出操作的核心组件。虽然它旨在简化开发人员的工作流程,但初学者常常会因为不了解其内部机制而做出降低IO性能的选择。通过深入...

    JAVA 的IO流的文件复制

    在Java编程语言中,IO(Input/Output)流是处理数据输入和输出的重要工具,尤其在文件操作中显得尤为重要。本篇文章将详细讲解如何使用Java的IO流进行文件复制,以及如何实现整个文件夹的复制,并检查复制是否成功。...

    彻底明白java的io系统

    Java的IO系统是Java编程中的核心部分,它允许程序与外部世界进行数据交换,包括读取文件、写入文件、网络通信以及设备交互等。理解并掌握Java的IO系统对于任何Java开发者,尤其是新手,都是至关重要的。在这个实例...

    Java_IO完全总结

    此外,为了提高性能和功能,Java IO还提供了大量的过滤器流和装饰器模式来增强基本流的功能。 #### 二、Java IO系统的组成 Java IO系统由多个层次组成,每个层次都有其特定的职责和功能: - **核心流**:包括`...

Global site tag (gtag.js) - Google Analytics