影响java io性能的原因之一是大量使用单字符io操作,即用inputStream.read(),Reader.read()每次读取一个字符。
缓冲可以通过两个方法实现:使用java提供的BufferedReader和BufferedInputStream实现,或者是
块读取方法一次读取一大块数据,
package useBuffer;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
//使用不同缓冲区读取文件
public class BufferTest {
public static void main(String[] args) {
File file = new File("D:\\zhoujunmei\\downloads\\XPath.chm");
BufferTest t = new BufferTest();
long start = System.currentTimeMillis();
t.read1(file);
System.out.println("read1耗时:"+(System.currentTimeMillis()-start)+"MS");
start = System.currentTimeMillis();
t.read2(file);
System.out.println("read2耗时:"+(System.currentTimeMillis()-start)+"MS");
start = System.currentTimeMillis();
t.read3(file);
System.out.println("read3耗时:"+(System.currentTimeMillis()-start)+"MS");
}
public void read2(File file){ //使用缓冲区,从缓冲区中读取字符,大大减少通过底层的I/O操作
try {
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
int cnt =0;
int b;
while((b=bis.read())!=-1){
if(b=='\n')
cnt++; //记录行数
}
bis.close(); //不用关闭fileinputstream???
System.out.println("文件行数:"+cnt);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void read1(File file){ //逐个读取字符
try {
FileInputStream fis = new FileInputStream(file);
int cnt =0;
int b;
while((b=fis.read())!=-1){
if(b=='\n')
cnt++; //记录行数
}
fis.close();
System.out.println("文件行数:"+cnt);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void read3(File file){ //块读取,直接将数据存入缓冲区中
try {
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int cnt =0;
int n; //每次读入的字节数
while((n=fis.read(buffer))!=-1){
for(int i = 0;i<n;i++){
if(buffer[i]=='\n')cnt++;
}
}
fis.close();
System.out.println("文件行数:"+cnt);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行结果:
文件行数:320
read1耗时:234MS
文件行数:320
read2耗时:31MS
文件行数:320
read3耗时:0MS
可以看出第二种和第三种都比第一种方法的效率高
分享到:
相关推荐
### Java文件下载的几种方式详解 在Java编程中,文件下载是常见的操作之一,无论是从本地文件系统还是网络上下载文件,都需要掌握一定的技巧和方法。本文将详细介绍几种常用的Java文件下载方式,包括本地文件下载、...
使用 Java 实现对 dbf 文件的简单读写需要使用以下几个类: 1. DBFWriter:用于 dbf 文件的写操作,提供了写入 dbf 文件的方法。 2. JDBField:用于表示 dbf 文件中的字段信息,包括字段名、字段类型、字段长度等。...
下面将详细介绍几种在Java中读取`.properties`配置文件的方法。 1. 使用`java.util.Properties`类 `Properties`类是Java提供的一种内置机制,用于处理属性列表。它继承了`Hashtable`类,提供了加载和保存属性列表...
最近单位有个项目需要读取excel文件的内容,特别对java读取excel文件的方法做了一点学习,也为了其他人以后能更简单地开发,少走弯路,特写此文,以下程序经过了我的测试,可以保证程序可用,如果你照搬都不行,可能...
总的来说,Java基于IO流读取文件的过程包括以下几个步骤: 1. 获取文件路径并解码。 2. 创建`File`对象,表示要读取的文件。 3. 使用`FileInputStream`创建字节输入流,用于读取二进制数据。 4. 使用`...
根据上述分析,针对Java程序读取服务器端数据文件的问题,可以采取以下几种方法: 1. **文本文件读取**:对于服务器端生成的文本数据文件,可以在不同数据段之间及整个数据文件结束处设立文本结束标志。此时,Java...
介绍Java直接读取、带缓冲读取、内存映射读取文件,并详细注释。
通过上述四个主要部分的分析,我们可以看到Java语言在处理文件读写方面提供了丰富的API支持。使用合适的类库可以极大地简化开发工作并提高程序的性能。例如,使用`StringBuffer`可以有效地处理字符串的动态增长;而`...
在Java中,我们可以使用多种方法来读取配置文件,下面将详细介绍几种常见的方法。 1. **使用`java.io`流读取** 最基础的方式是使用Java的I/O流来读取文本配置文件(通常是.properties格式)。例如,`java.io....
根据不同的标准,流可以分为几种类型。 ##### 1. 按数据流动方向 - **输入流**:主要用于从数据源读取数据。输入流只能从中读取数据,而不能向其中写入数据。例如,`FileInputStream`用于从文件中读取字节数据。 -...
### HDF5 文件结构以及基于 Java 的读写 #### HDF 概述 HDF(Hierarchical Data Format)是一种自我描述、多对象的文件格式,专为高效地存储和分发科学数据而设计。它由美国国家超级计算应用中心(NCSA)开发,...
### Java读取文件方法概述 在Java中,有多种方式可以用来读取文件的内容。这些方法大致可以分为两类:基于字节流的方法和基于字符流的方法。这两种方法分别适用于不同的场景,具体选择哪一种取决于实际需求。 ####...
很好的解决大文件读取中需要耗费大量时间的问题,三种方法各异,对不同的文本文件都能较好解决。
在Java编程中,Properties文件是一种常用的配置文件格式,用于存储应用程序的配置参数或者环境设置。这些文件通常以键值对的形式存在,例如`key=value`。读取Properties文件是Java开发中的常见操作,特别是在需要...
### Java读写XML文件知识点详解 #### 一、概述 在Java编程中,对XML文件进行读取与写入是一项非常常见的任务。XML(可扩展标记语言)是一种用于标记数据的语言,非常适合用来存储和传输数据。Java提供了多种API来...
6. **Scanner类**:对于从文件中读取结构化数据,如整数、浮点数或字符串,`java.util.Scanner`类提供了一种方便的方法。 7. **异常处理**:在进行文件操作时,可能会遇到如文件未找到、权限不足等问题,因此需要...
在Java类中,读取配置文件信息可以使用多种方法,其中一种方法是使用`this.getClass().getClassLoader().getResourceAsStream`方法。 `this.getClass().getClassLoader().getResourceAsStream`方法是Java类中的一种...
Java语言在处理各种类型的数据文件方面具有广泛的应用,其中之一就是读取KML(Keyhole Markup Language)文件。KML是一种用于存储地理空间数据的标准格式,常用于Google Earth、Google Maps等应用。本项目的核心是...
本文将详细介绍如何使用Java来读取和修改XML文件,主要涉及以下几个核心知识点: 1. **DOM解析器**: Document Object Model(DOM)是一种将XML文档转换为内存中的树形结构的方法,使得可以遍历和修改XML文件。...