-
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个答案 按时间排序 按投票排序
-
采纳的答案
IO操作,磁盘的内容不是直接到java用户的进程中的,这样的话就太慢了。
当java进程请求IO操作的时候,它执行调用把控制权交给内核,内核先会看内核空间的缓冲区内有没有数据,有就直接读出来,没有的话就调用磁盘控制器去磁盘读取数据,读取会先读取到内核空间,然后再到用户进程中。内核这部分操作显然是java api调用native本地方法(也就是C语言或者C++)。
这是一些操作系统的知识,LZ可以参考一下Reilly的java nio那本书,上面阐述的很详细。2012年3月12日 20:38
-
我测试了一下,第一次读一个新文件时确实是10ms~40ms,再次执行就0毫秒了;
估计是受磁盘预读和系统缓存的影响。
http://simpleframework.net/blog/v/8486.html2012年3月12日 22:25
-
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 IO模型。IO模型基于流,数据是从输入流到输出流的单向传输。例如,`FileInputStream`和`FileOutputStream`...
Java 中文件 IO 流 Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写操作。文件流是指在程序中用于文件输入输出的对象, Java 中提供了多种文件流类型,包括 InputStream ...
IO(Input/Output)流是Java提供的一种处理输入输出数据的方式,包括读取和写入文件。本篇文章将详细介绍如何使用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中的基本文件操作,包括文件的移动、读写以及文本文件的读写。 首先,让我们从文件操作开始。在Java中...
本文将分析Java NIO与Java IO在性能上的对比,并尝试找出性能差异的原因,以及探讨哪种编程模型更适合高并发的应用场景。 Java IO模型是一种阻塞型I/O模型,在数据的读写过程中,如果线程在等待数据,将会一直被挂...
Java.io.CharConversionException: isHexDigit 处理详解 Java.io.CharConversionException: isHexDigit 是 Java 中一种常见的异常,通常发生在传输数据时编码不正确或 URL 传值时出现问题。本文将对该异常进行详细...
在Java编程语言中,`IO`(Input/Output)是处理数据输入和输出的核心部分,尤其是在处理大数据量文件时显得尤为重要。Java IO API提供了一系列类和接口,使得开发者能够高效地读取、写入和操作文件。下面我们将深入...
本资源“java_io.rar”提供了关于如何在Java中进行文件操作的示例代码,包括读取、移动、删除和复制文件等常见任务。我们将深入探讨这些主题,以便更好地理解Java I/O API的使用。 首先,让我们从读取本地文件开始...
### Java.io.Reader与Java.io.InputStream的关键差异解析 在深入探讨`java.io.Reader`与`java.io.InputStream`的具体差异之前,我们首先需要理解这两者在Java I/O操作中的基础角色。`java.io.Reader`和`java.io....
Java IO流分为字符流和字节流,适用于不同类型的文件和数据源。本文将深入探讨如何使用IO流来读取文件,并通过实例代码详细解释每一个步骤。 首先,要读取一个文件,我们需要获取文件的路径。在给定的示例中,路径...
Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...
### 利用缓冲区提高Java应用程序的IO性能 #### 摘要与背景介绍 Java作为一门具有跨平台特性的编程语言,在多个领域都获得了广泛的应用。随着Java应用的不断扩展,其性能问题逐渐成为人们关注的重点,尤其是输入...
java io 文件读写
### Java IO性能优化 #### 4.1 基本IO操作 在Java开发中,`java.io`包是处理输入输出操作的核心组件。虽然它旨在简化开发人员的工作流程,但初学者常常会因为不了解其内部机制而做出降低IO性能的选择。通过深入...
在Java编程语言中,IO(Input/Output)流是处理数据输入和输出的重要工具,尤其在文件操作中显得尤为重要。本篇文章将详细讲解如何使用Java的IO流进行文件复制,以及如何实现整个文件夹的复制,并检查复制是否成功。...
Java的IO系统是Java编程中的核心部分,它允许程序与外部世界进行数据交换,包括读取文件、写入文件、网络通信以及设备交互等。理解并掌握Java的IO系统对于任何Java开发者,尤其是新手,都是至关重要的。在这个实例...
此外,为了提高性能和功能,Java IO还提供了大量的过滤器流和装饰器模式来增强基本流的功能。 #### 二、Java IO系统的组成 Java IO系统由多个层次组成,每个层次都有其特定的职责和功能: - **核心流**:包括`...