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

java IO写入文件效率——几种方法比较

 
阅读更多

总结:

如果按字符和字节来分类,除方法1和2,其余都是按字符写入文件,字符写入一般比字节快;看java API可知,FileWriter的父类就是OutputStreamWriter,他俩都是实现Writer类,从这点上来说,方法4和6几乎没区别,时间有些微的差别,但内部机制是一样的,而且方法6较简单,定义变量稍,以前总用方法4,看来以后得改变下了。

测试写入类



/**
  * 测试结果
  *
  * 1.file's long:16kb
  *
  fileWrite's time----------36
  outputStreamTest's time----------167
  bufferedOutputTest's time----------17
  bufferedWriteTest's time----------14
  bufferedWrite And FileWriterTest's time----------9
  bufferedWrite And BufferedOutputStreamTest's time----------12
  *
  * 2.file's long:1600kb
  fileWrite's time----------69
  outputStreamTest's time----------1282
  bufferedOutputTest's time----------68
  bufferedWriteTest's time----------40
  bufferedWrite And FileWriterTest's time----------52
  bufferedWrite And BufferedOutputStreamTest's time----------37
  *
  * 3.file's long:16000kb
  fileWrite's time----------555
  outputStreamTest's time----------12448
  bufferedOutputTest's time----------599
  bufferedWriteTest's time----------346
  bufferedWrite And FileWriterTest's time----------316
  bufferedWrite And BufferedOutputStreamTest's time----------358
   4.file's long:160000kb
 
  fileWrite's time----------5203
  outputStreamTest's time----------127182
  bufferedOutputTest's time----------5972
  bufferedWriteTest's time----------3445        最优
  bufferedWrite And FileWriterTest's time----------5904
  bufferedWrite And BufferedOutputStreamTest's time----------5353
 
 
  5.file's long:1600000kb
 
  fileWrite's time----------50416
  outputStreamTest's time----------1303242
  bufferedOutputTest's time----------60931
  bufferedWriteTest's time----------46697
  bufferedWrite And FileWriterTest's time----------48710
  bufferedWrite And BufferedOutputStreamTest's time----------64354
  */

public static void main(String[] args) {

  String str = "abcdefghiJKLMN!";
  int count = 1000000;
  TestOutputStream t = new TestOutputStream();
  long start = System.currentTimeMillis();
  t.fileWriteTest(count, str);
  long end = System.currentTimeMillis();
  System.out.println("fileWrite's time---------" + (start - end));

  start = System.currentTimeMillis();
  t.outputStreamTest(count, str);
  end = System.currentTimeMillis();
  System.out.println("outputStreamTest's time---------" + (start - end));
 
  start = System.currentTimeMillis();
  t.bufferedOutputTest(count, str);
  end = System.currentTimeMillis();
  System.out
    .println("bufferedOutputTest's time---------" + (start - end));
 
  start = System.currentTimeMillis();
  t.bufferedWriteTest(count, str);
  end = System.currentTimeMillis();
  System.out.println("bufferedWriteTest's time---------" + (start - end));
 
  start = System.currentTimeMillis();
  t.bufferedWriteAndFileWriterTest(count, str);
  end = System.currentTimeMillis();
  System.out.println("bufferedWrite And FileWriterTest's time---------" + (start - end));
 
  start = System.currentTimeMillis();
  t.bufferedWriteAndBufferedOutputStreamTest(count, str);
  end = System.currentTimeMillis();
  System.out.println("bufferedWrite And BufferedOutputStreamTest's time---------" + (start - end));
  
 
}



/**
  *1 按字节写入 FileOutputStream
  *
  * @param count 写入循环次数
  * @param str 写入字符串
  */
public void outputStreamTest(int count, String str) {
  File f = new File("f:test1.txt");
  OutputStream os = null;
  try {
   os = new FileOutputStream(f);
   for (int i = 0; i < count; i++) {
    os.write(str.getBytes());
   }
   os.flush();
   System.out.println("file's long:" + f.length());
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    os.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}


  /**
  *2 按字节缓冲写入 BufferedOutputStream
  *
  * @param count 写入循环次数
  * @param str 写入字符串
  */
public void bufferedOutputTest(int count, String str) {
  File f = new File("f:test2.txt");
  BufferedOutputStream bos = null;
  try {
   OutputStream os = new FileOutputStream(f);
   bos = new BufferedOutputStream(os);
   for (int i = 0; i < count; i++) {
    bos.write(str.getBytes());
   }
   bos.flush();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    bos.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}



  /**
  *3 按字符写入 FileWriter
  *
  * @param count 写入循环次数
  * @param str 写入字符串
  */
public void fileWriteTest(int count, String str) {
  File f = new File("f:test.txt");
  Writer writer = null;
  try {
   writer = new FileWriter(f);
   for (int i = 0; i < count; i++) {
    writer.write(str);
   }
   writer.flush();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    writer.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
}


  /**
  *4 按字符缓冲写入 BufferedWriter
  *
  * @param count 写入循环次数
  * @param str 写入字符串
  */
public void bufferedWriteTest(int count, String str) {
  File f = new File("f:test3.txt");
  OutputStreamWriter writer = null;
  BufferedWriter bw = null;
  try {
   OutputStream os = new FileOutputStream(f);
   writer = new OutputStreamWriter(os);
   bw = new BufferedWriter(writer);
   for (int i = 0; i < count; i++) {
    bw.write(str);
   }
   bw.flush();
   if(f.exists()){
    f.delete();
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    bw.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}


 
/**
  *5 按字符缓冲写入 BufferedWriter and BufferedOutputStream
  *
  * @param count 写入循环次数
  * @param str 写入字符串
  */
public void bufferedWriteAndBufferedOutputStreamTest(int count, String str) {
  File f = new File("f:test4.txt");
  BufferedOutputStream bos=null;
  OutputStreamWriter writer = null;
  BufferedWriter bw = null;
  try {
   OutputStream os = new FileOutputStream(f);
   bos=new BufferedOutputStream(os);
   writer = new OutputStreamWriter(bos);
   bw = new BufferedWriter(writer);
   for (int i = 0; i < count; i++) {
    bw.write(str);
   }
   bw.flush();
   if(f.exists()){
    f.delete();
    System.out.println("delete---");
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    bw.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}

  /**
  *6 按字符缓冲写入 BufferedWriter and FileWriter
  *
  * @param count 写入循环次数
  * @param str 写入字符串
  */
public void bufferedWriteAndFileWriterTest(int count, String str) {
  File f = new File("f:test5.txt");
  FileWriter fw=null;
  BufferedWriter bw = null;
  try {
   fw=new FileWriter(f);
   bw = new BufferedWriter(fw);
   for (int i = 0; i < count; i++) {
    bw.write(str);
   }
   bw.flush();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    bw.close();
    if(f.exists()){
     f.delete();
    }
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
}

分享到:
评论

相关推荐

    JAVA读取文件——以行为单位读取

    在Java编程语言中,读取文件是常见的任务之一,尤其对于处理文本文件,如TXT文件,以行为单位读取文件内容是一种效率较高且易于管理数据的方式。本篇将深入探讨如何使用Java进行逐行读取TXT文件,并提供相关示例代码...

    java io 与java nio区别

    它主要包括以下几种核心类: - `InputStream`/`OutputStream` - `Reader`/`Writer` 这些类提供了一系列用于读写文件、网络数据等的基础方法。在Java IO模型中,当一个线程发起一个IO操作请求时,该线程会一直阻塞...

    IO——test

    标题中的"IO——test"显然指的是与输入/输出(Input/Output,简称IO)相关的测试。在计算机科学中,IO是程序与外部世界交互的重要方式,包括读取数据(输入)和写入数据(输出)。这可能是一个测试用例或者一个实验...

    java文件流

    Java文件流 Java中的输入输出是以流(Stream)来方式来处理的,流是在计算机的输入、输出操作中流动的数据序列(从网上下载软件时能清晰地感受到)。在 Java 中,流是指一序列的数据元素,这些数据元素是从一个...

    Java学习IO流小结--字符流

    ### Java学习IO流小结——字符流 #### 知识点概述 在Java中,处理文件和数据流是一项基本而重要的任务。IO流是Java语言中处理输入/输出的重要工具,它包括字节流和字符流两大类。本文将重点讨论字符流的相关概念...

    基于JAVA的剪刀石头布游戏设计——Java课程设计报告_.pdf

    4. Java的多线程机制:在文档内容中,提到了与线程相关的几个关键概念,如`Thread`、`Runnable`和`run()`方法。`Thread`是Java中表示线程的一个类,可以创建线程并执行线程。`Runnable`是一个接口,定义了一个`run()...

    JavaSE实战——客户端上传文件到服务端

    Java的`java.io`包提供了多种类来处理文件,如FileInputStream用于读取文件,BufferedInputStream可以提高读取效率。我们需要先打开文件,然后以字节流的形式读取内容,再将其写入Socket的输出流。 3. **TCP协议**...

    java基础_java_源码

    描述中提到的几个主题——Java网络编程、多线程、IO(输入/输出)、注解和反射机制,都是Java开发者必须掌握的重要部分。 1. **Java网络编程**:Java提供了丰富的类库来支持网络编程,如Socket和ServerSocket类,...

    Java-NIO-系列教程

    Buffer 主要有以下几种操作: - **allocate()**:分配一个新的 Buffer。 - **put()**:将数据放入 Buffer。 - **flip()**:准备从 Buffer 读取数据。 - **get()**:从 Buffer 读取数据。 - **clear()** 或 **...

    Java nio详细介绍 详细介绍java nio

    - **NIO (New IO)**:随着JDK 1.4的发布,Java引入了一种全新的IO处理方式——NIO,它提供了一系列新特性和改进,以提高IO效率。 NIO的关键特性包括但不限于: - **缓存(Buffer)支持**:为所有的原始类型提供缓存...

    java串口通信代码.pdf

    标题《Java串口通信代码》描述了文档所涉及的核心内容——Java编程语言在串口通信方面的应用。串口通信是一种计算机与外部设备通信的常见方式,尤其在工业自动化、数据采集、远程控制等领域有着广泛的应用。Java作为...

    项目 飞翔的小鸟 Java编写

    7. **文件存储与读取**:为了保存玩家的得分或者游戏进度,可以使用Java的`java.io`包进行文件操作,将数据写入文件并在游戏重启时读取。 8. **异常处理**:在编程过程中,异常处理是确保程序稳定运行的重要环节。...

    java(超级玛丽游戏)

    Java的`java.io`包提供了文件读写功能,可以将分数、关卡进度等信息写入文件,下次游戏时再读取出来。 在项目“SuperMario”中,你可以找到这些知识点的具体实现。通过对源代码的阅读和学习,你将能够更深入地理解...

    java NOI 学习

    为此,从JDK 1.4开始,Java引入了一种新的IO操作模型——NIO(New IO),旨在提高程序处理大量并发连接的能力。NIO的主要特点在于它提供了一套基于缓冲区(buffer)且支持非阻塞(non-blocking)IO操作的API。 ####...

    东北大学秦皇岛分校c#大作业——电子笔记本

    "文件"菜单中的"新建"操作可以创建一个新的文本文件,"打开"操作则使用FileStream或StreamReader读取已存在的文件内容,"保存"操作则使用FileStream或StreamWriter将编辑内容写入文件。注意,文件操作需要处理异常,...

    java记事本

    在Java中进行文件操作主要包括文件的读取、写入、删除等。在提供的代码片段中,可以看到对文件读取的支持: ```java import java.io.BufferedReader; import java.io.FileReader; ``` 这意味着程序可能包含打开...

    51CTO下载-韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)

    - **文件 I/O 流编程**:读取、写入文件及数据流处理。 - **网络编程**:实现网络通信功能,如 TCP/IP、UDP 协议的应用。 - **多线程编程**:利用 Java 多线程机制提高程序效率。 ### Java EE 基础 Java EE 技术栈...

    2021-2022计算机二级等级考试试题及答案No.2757.docx

    在Java中处理文件输入输出时,为了按行读取或者写入文件,通常会选择使用特定的类来提高效率和便利性。题目提到的选项中,`BufferedReader` 和 `BufferedWriter` 是最适合这一目的的类。 **详细解释:** - **`...

    基于Java的实例源码-GIF动画制作工具 GiftedMotion.zip

    这个名为"基于Java的实例源码-GIF动画制作工具 GiftedMotion.zip"的压缩包文件提供了一个使用Java编写的GIF动画制作工具——GiftedMotion的源代码。通过学习和理解这个工具的源码,开发者可以深入了解如何在Java环境...

    基于Java的异步输出框架 AsynWriter.zip

    在Java编程领域,异步处理是一种提升程序性能和效率的重要技术。它允许程序在等待某个耗时操作完成的同时,可以继续执行其他任务,从而避免了阻塞主线程,提升了系统的响应速度。本压缩包"基于Java的异步输出框架 ...

Global site tag (gtag.js) - Google Analytics