java读取文件效率问题
2012-01-05 12:49
996 查看
日志原文:http://blog.sohu.com/people/!d2VsbGlteXlAc29odS5jb20=/156798731.html
最近在项目中有一个用smb读取共享文件的应用,在部署过程中发现一个奇怪现象,在公司测试时其用时还马马虎虎,虽是有点慢,但还不至于让人无法忍受.但一部署都客户现场,则超级慢.严重影响系统的使用.没办法只能对其进行整改:
1.首先,将所有的for循环检查一遍,能移出去的尽量移出去,并进行不同方法的封装
2.将原有方法中抛出的异常全部捕捉起来,并将所有该关闭的连接全部在finally里面关闭
3.对线程设置timeout,以防止死锁
最后是对程序进行手术,阅读代码才发现原来代码中下载文件用的是:以字节为单位读取文件内容,一次读一个字节这种方式 就是这个原因造成系统运行超慢:
int tempbyte;
while ((tempbyte = ()) != -1) {
(tempbyte);
}
将其稍微改动一下,一次性读入多个字节:
byte[] tempbytes = new byte[1024];
int byteread = 0;
// 读入多个字节到字节数组中,byteread为一次读入的字节数
while ((byteread = (tempbytes)) != -1) {
(tempbytes, 0, byteread);
}
重启运行,原来要近一个小时的下载工作,竟然只用了不到5秒钟,就搞定.
总结:
内存存取时间单位是纳秒级(10E-9),磁盘存取时间单位是毫秒级(10E-3),同样操作一次的开销,内存比磁盘快了百万倍。因此要尽量用缓存流进行读写文件,以减少对磁盘的读取次数.
经只读测试,BufferedReader耗用的时间是RandomAccessFile的10倍以上,FileInputStream耗用的时间是RandomAccessFile的1-2倍,测试读的文件是35M左右,如果文件再大差距更明显.这里后面两个用的是字节byte[] b1=new byte[8*1024],而前面也用的是字符char[] data=new char[8*1024]
注意:如果RandomAccessFile用readLine(),则效果会差很多,耗时会比用字节的慢100多倍.
看来IO读取文件,这里面水还挺深的,有时间明天再整理一下.
最近在项目中有一个用smb读取共享文件的应用,在部署过程中发现一个奇怪现象,在公司测试时其用时还马马虎虎,虽是有点慢,但还不至于让人无法忍受.但一部署都客户现场,则超级慢.严重影响系统的使用.没办法只能对其进行整改:
1.首先,将所有的for循环检查一遍,能移出去的尽量移出去,并进行不同方法的封装
2.将原有方法中抛出的异常全部捕捉起来,并将所有该关闭的连接全部在finally里面关闭
3.对线程设置timeout,以防止死锁
最后是对程序进行手术,阅读代码才发现原来代码中下载文件用的是:以字节为单位读取文件内容,一次读一个字节这种方式 就是这个原因造成系统运行超慢:
int tempbyte;
while ((tempbyte = ()) != -1) {
(tempbyte);
}
将其稍微改动一下,一次性读入多个字节:
byte[] tempbytes = new byte[1024];
int byteread = 0;
// 读入多个字节到字节数组中,byteread为一次读入的字节数
while ((byteread = (tempbytes)) != -1) {
(tempbytes, 0, byteread);
}
重启运行,原来要近一个小时的下载工作,竟然只用了不到5秒钟,就搞定.
总结:
内存存取时间单位是纳秒级(10E-9),磁盘存取时间单位是毫秒级(10E-3),同样操作一次的开销,内存比磁盘快了百万倍。因此要尽量用缓存流进行读写文件,以减少对磁盘的读取次数.
经只读测试,BufferedReader耗用的时间是RandomAccessFile的10倍以上,FileInputStream耗用的时间是RandomAccessFile的1-2倍,测试读的文件是35M左右,如果文件再大差距更明显.这里后面两个用的是字节byte[] b1=new byte[8*1024],而前面也用的是字符char[] data=new char[8*1024]
注意:如果RandomAccessFile用readLine(),则效果会差很多,耗时会比用字节的慢100多倍.
看来IO读取文件,这里面水还挺深的,有时间明天再整理一下.
相关文章推荐
- java读取文件效率问题
- JAVA问题总结之28--读取某目录下所有文件
- 安卓(JAVA)读取Mp3文件中的歌曲信息(及readLine()出现乱码问题的解决方法)
- 部署后的java程序 读取配置文件的问题
- JAVA本地读取文件,解决中文乱码问题
- JavaWeb中读取文件资源的路径问题
- 关于Java读取文件操作时路径中的斜杠问题
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- Java 读取Properties文件时应注意的路径问题
- java读取隐藏文件的问题
- Java解析DBF文件,错误Failed to parse Number: For input string: "-.---" 或读取不出数据或乱码问题都在这里解决
- Java 读取写入文件乱码问题解决
- JAVA从UTF-8编码文件读取字符串时,前边有问号的问题
- 关于Excel文件读取的效率问题
- 关于Java读取文件操作时路径中的斜杠问题
- Java或者JAR包获取读取资源文件的路径的问题总结
- Java 使用SMB读取远程文件遇到的问题
- JAVA读取文件的路径问题!
- java web中读取properties文件时的路径问题
- 两行解决java读取excel文件内数字显示为小数点或者科学计数法问题