- 浏览: 190928 次
文章分类
最新评论
-
luxing44530:
你好, 关于 JDK 7中也有一个支持协程方式的实现 在那呀? ...
Java性能调优笔记 -
songgz:
你是一个会思考的人,前途无量,代码审查显然不能以风格和规则为主 ...
到底该怎么样做代码审查? -
jiaoronggui:
遇到过一模一样的问题
一条Select语句导致瓶颈 -
Leon.Wood:
写出让计算机读懂的代码很容易,写出让人读懂的只有高手才能做到. ...
到底该怎么样做代码审查? -
ajuanlove:
不经常用这玩意
对300万一张表数据,用游标进行循环,不同写法的效率比较
Java中的IO的性能优化
在使用IO的时候注意一下细节,能使性能得到很大的优化.
首先读写大文件,使用Buffer是肯定的了,使用方法,有下边两个
1
方法一:
2 public static void test1(String fileName) {
3 long start = System.currentTimeMillis();
4 try {
5 FileInputStream fis = new FileInputStream(fileName);
6 BufferedReader br = new BufferedReader( new InputStreamReader(fis) );
7 StringBuffer sb = new StringBuffer();
8 String str;
9 while ((str = br.readLine()) != null ) {
10 sb.append(str);
11 }
12 } catch (IOException e) {
13 }
14 long end = System.currentTimeMillis();
15 long time = end - start;
16 System.out.println(time);
17 }
18 方法二:
19 public static void test2(String fileName) {
20 long start = System.currentTimeMillis();
21 try {
22 FileInputStream fis = new FileInputStream(fileName);
23 byte buf[] = new byte [ 8192 ];
24 int n;
25 StringBuffer sb = new StringBuffer();
26 while ((n = fis.read(buf)) != - 1 ) {
27 sb.append(buf);
28 }
29 fis.close();
30 } catch (IOException e) {
31 }
32 long end = System.currentTimeMillis();
33 long time = end - start;
34 System.out.println(time);
35 }
2 public static void test1(String fileName) {
3 long start = System.currentTimeMillis();
4 try {
5 FileInputStream fis = new FileInputStream(fileName);
6 BufferedReader br = new BufferedReader( new InputStreamReader(fis) );
7 StringBuffer sb = new StringBuffer();
8 String str;
9 while ((str = br.readLine()) != null ) {
10 sb.append(str);
11 }
12 } catch (IOException e) {
13 }
14 long end = System.currentTimeMillis();
15 long time = end - start;
16 System.out.println(time);
17 }
18 方法二:
19 public static void test2(String fileName) {
20 long start = System.currentTimeMillis();
21 try {
22 FileInputStream fis = new FileInputStream(fileName);
23 byte buf[] = new byte [ 8192 ];
24 int n;
25 StringBuffer sb = new StringBuffer();
26 while ((n = fis.read(buf)) != - 1 ) {
27 sb.append(buf);
28 }
29 fis.close();
30 } catch (IOException e) {
31 }
32 long end = System.currentTimeMillis();
33 long time = end - start;
34 System.out.println(time);
35 }
方法一1937ms
方法二47ms
测试结果相差大概50倍左有,很大。
而我平时的习惯是方法一。问题主要出在readLine()上。
如果只是简单的文件拷贝,下边两种方法也不错
1
public
static
void
test3()
{
2 String cmd = " copy d:/out1.txt out2.txt " ;
3 try {
4 Runtime.getRuntime().exec(cmd);
5 } catch (Exception e) {
6 e.printStackTrace();
7 }
8 }
9 public static void test4() {
10 String inFileName = " d:/out1.txt " ;
11 String outFileName = " d:/out2.txt " ;
12 long start = System.currentTimeMillis();
13 try {
14 File inFile = new File(inFileName);
15 File outFile = new File(outFileName);
16 RandomAccessFile inRaf = new RandomAccessFile(inFile, " r " );
17 RandomAccessFile outRaf = new RandomAccessFile(outFile, " rw " );
18 FileChannel infc = inRaf.getChannel();
19 FileChannel outfc = outRaf.getChannel();
20 infc.transferTo( 0 , inFile.length(),outfc );
21 infc.close();
22 outfc.close();
23 } catch (Exception e) {
24 e.printStackTrace();
25 }
26 long end = System.currentTimeMillis();
27 long time = end - start;
28 System.out.println(time);
29 }
2 String cmd = " copy d:/out1.txt out2.txt " ;
3 try {
4 Runtime.getRuntime().exec(cmd);
5 } catch (Exception e) {
6 e.printStackTrace();
7 }
8 }
9 public static void test4() {
10 String inFileName = " d:/out1.txt " ;
11 String outFileName = " d:/out2.txt " ;
12 long start = System.currentTimeMillis();
13 try {
14 File inFile = new File(inFileName);
15 File outFile = new File(outFileName);
16 RandomAccessFile inRaf = new RandomAccessFile(inFile, " r " );
17 RandomAccessFile outRaf = new RandomAccessFile(outFile, " rw " );
18 FileChannel infc = inRaf.getChannel();
19 FileChannel outfc = outRaf.getChannel();
20 infc.transferTo( 0 , inFile.length(),outfc );
21 infc.close();
22 outfc.close();
23 } catch (Exception e) {
24 e.printStackTrace();
25 }
26 long end = System.currentTimeMillis();
27 long time = end - start;
28 System.out.println(time);
29 }
更多信息请查看 java进阶网 http://www.javady.com
发表评论
-
Java性能调优方法:基于等待的调优(四)
2012-04-14 21:33 839基于技术的等待 ... -
Java性能调优方法:基于等待的调优(三)
2012-04-14 21:33 923基于等待的调优 ... -
Java性能调优工具“JRMC”的介绍
2012-04-11 13:00 924Java虚拟机(JVM)及垃圾收集器(GC)负责管理大多数 ... -
java代码性能优化四
2012-04-10 13:17 2329正确的字符串比较 字符串比较方法的性能 ... -
java代码性能优化三
2012-04-10 13:14 1296使用局部缓存 在 DA ... -
java代码性能优化二
2012-04-09 10:19 953正确使用递归 递归算法可以清晰表达复杂的算法,提高代码 ... -
java代码性能优化一
2012-04-09 10:18 1557使用正确的集合类 在我们的代码中常用的 ... -
Java性能调优笔记
2012-04-14 21:32 1345调优步骤:衡量系统现 ... -
Java性能调优
2012-04-14 21:32 858一 基本知识 1.1 性能是什么 在性能调 ... -
Java性能调优方法:基于等待的调优(五)
2012-04-14 21:32 697后退调优 现在 ... -
Java性能调优方法:基于等待的调优(四)
2012-04-15 23:08 731基于技术的等待点 ... -
Java性能调优方法:基于等待的调优(三)
2012-04-15 23:08 642基于等待的调优方法 建好了负载测试,接下 ... -
Java性能调优方法:基于等待的调优(二)
2012-04-12 22:01 806已存在应用 ... -
Java性能调优方法:基于等待的调优(一)
2012-04-12 22:01 727企业java应用的性能调优是一项艰巨的、有时甚至是徒劳的 ... -
Java性能调优工具
2012-04-12 22:01 859作为一名Java ... -
Java垃圾回收调优
2012-04-12 22:01 759在Java中,通常通讯类型的服务器对GC(Garbage Co ... -
Java性能调优工具“JRMC”的介绍
2012-04-12 22:01 829Java虚拟机(JVM)及垃圾收集器(GC)负责管理大多数 ... -
java代码性能优化四
2012-04-08 23:03 0正确的字符串比较 字符串比较 ... -
java代码性能优化三
2012-04-08 23:02 0使用局部缓存 在 DALC 方法中,很多地方需要对 ... -
java代码性能优化二
2012-04-08 22:59 0正确使用递归 递归算法可以清晰表达复杂的算法,提高代码 ...
相关推荐
### Java IO性能优化 #### 4.1 基本IO操作 在Java开发中,`java.io`包是处理输入输出操作的核心组件。虽然它旨在简化开发人员的工作流程,但初学者常常会因为不了解其内部机制而做出降低IO性能的选择。通过深入...
提高Java IO操作的性能 虽然抱怨Java程序性能不佳的呼声由来已久,但实际上,如果开发者在整个开发周期内都能够关注性能问题,Java程序完全可以和C/C++程序一样快。本文分析了Java IO应用中一些常见的性能问题。
在本文中,我们将深入探讨Java性能优化的关键点,帮助你的Java程序达到更快、更稳定的目标。 1. **JVM调优**:Java虚拟机(JVM)是Java程序运行的基础,优化JVM参数可以显著提升性能。例如,调整堆内存大小(-Xms和-...
### Eclipse 开发性能优化与 Java 代码性能优化 在日常的软件开发过程中,尤其是在使用 Eclipse 进行 Android 开发时,经常会遇到 IDE 运行缓慢的情况。为了提高开发效率,本文将详细介绍 Eclipse 开发环境及 Java ...
即便书中某些优化技术可能因Java版本更新而过时,但其中所传达的性能优化思想和分析方法仍然具有一定的参考价值。 需要注意的是,由于Java技术不断更新,某些最佳实践可能会随着新的JVM版本和相关工具的出现而变化...
### 利用缓冲区提高Java应用程序的IO性能 #### 摘要与背景介绍 Java作为一门具有跨平台特性的编程语言,在多个领域都获得了广泛的应用。随着Java应用的不断扩展,其性能问题逐渐成为人们关注的重点,尤其是输入...
Java性能优化是提升软件效率和用户体验的关键环节,尤其是在大规模应用和高并发场景中。本教程将深入探讨如何通过各种技术和策略来优化Java程序,确保其高效运行。 首先,理解Java性能的基础是JVM(Java虚拟机)。...
Java NIO(New IO)是Java 1.4引入的一个新模块,它是对传统IO(Input/Output)的扩展,提供...而`CopyFile.java`和`io与nio性能测试.txt`就是这种比较的关键工具,它们可以帮助我们理解这两种技术在实际操作中的表现。
《大话java性能优化》是周明耀先生的一本深入探讨Java性能调优的专业书籍,其主要内容涵盖了Java程序设计中的各种性能优化策略和技术。这本书旨在帮助开发者理解和掌握如何提升Java应用的运行效率,减少资源消耗,...
Java的IO系统是Java编程中的核心部分,它允许程序与外部世界进行数据交换,包括读取文件、写入文件、网络通信以及设备交互等。理解并掌握Java的IO系统对于任何Java开发者,尤其是新手,都是至关重要的。在这个实例...
7. **性能优化**:在处理大量数据时,可能会考虑使用并发排序算法,如Fork/Join框架下的ParallelSort,或者使用并行流(Java 8及以上版本)进行并行排序,以提高效率。 8. **示例代码**:压缩包中的`j2ee`和`...
Java的IO操作是Java编程中的重要组成部分,它允许开发者处理输入和输出,包括读取文件、写入...同时,随着Java NIO(New IO)和NIO.2的引入,Java的IO性能和功能得到了显著提升,为开发者提供了更多高效和灵活的选择。
Java的IO操作是Java编程中的基础且重要的一部分,它提供了对输入输出流的处理,使得程序可以与外部设备(如硬盘、键盘、显示器)进行数据交互。本代码库包含了Java进行基本IO操作的源代码,涵盖了文件的复制、删除、...
本文档深入探讨了Java中的IO性能优化,包括底层和高级I/O问题。 首先,Java提供了两种基本的磁盘文件结构:基于字节流和字符序列。字节流适用于处理任何类型的数据,而字符流适用于处理文本数据。由于Java中的字符...
在Java编程中,"java.io.FileNotFoundException: ***** (Too many open files)" 是一个常见的错误,意味着程序尝试打开的文件数量超过了操作系统的限制。这个错误通常出现在处理大量文件或长时间运行的程序中,尤其...
Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及文件、网络、内存等数据传输。本文将深入探讨Java IO的基本概念、分类、选择流的策略以及常用的流类型。 首先,File类是Java IO的...
- 缓冲区是Java IO中的一个重要概念,它能显著提升读写性能。通过预读或滞后写入,减少实际的I/O操作次数。 - `BufferedInputStream` 和 `BufferedReader` 使用内部缓冲区来提高效率,例如一次性读取多个字节或...
Java NIO(New IO)是自Java 1.4引入的一个重要特性,提供了非阻塞I/O操作。NIO的核心组件包括通道(Channel)和选择器(Selector)。通道类似于流,但可以同时进行读写操作,且支持异步数据传输。选择器允许单线程...
缓冲流是Java IO流中的一种优化机制,负责将数据缓存在内存中,以提高输入/输出性能。 a) 输入流:BufferedInputStream BufferedReader BufferedInputStream和BufferedReader是缓冲流的输入流,负责将数据缓存在...