Java 读取大文件有什么可以优化的吗? 1G-10G

scbb 2009-02-02 03:23:46
在处理1G ~ 10G 的xml文件时,发现挺慢。

请问有什么可以优化的?代码上有什么注意的? 运行时有什么可以提高性能的设置码?
...全文
1398 43 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonehigher125 2012-08-02
  • 打赏
  • 举报
回复
读取3G的文件都没问题
private static void test1() throws IOException {
System.out.println("start..");
long start = System.currentTimeMillis();
int buffersize = 1024 * 1024;
OutputStream outputStream = new FileOutputStream(new File("f:/test1.rar"));
InputStream isInputStream = new FileInputStream(new File("d:\\hahaha.rar"));
byte[] buffer = new byte[buffersize];
int readCount = 0;
while ((readCount = isInputStream.read(buffer, 0, buffersize)) > 0) {
// System.out.println(readCount);
outputStream.write(buffer, 0, readCount);

}
outputStream.close();
isInputStream.close();
System.out.println("end.." + (System.currentTimeMillis() - start) / 1000.0 + "s");

}
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 melody1128 的回复:]
一点一点的吧?
我好像在说废话。。。

有一个东西叫google。。。
最大可达2GB.

Java code

import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class LargeMappedFiles {
static int length……
[/Quote]
麻烦你把别人的帖过来也要解释一下好不好,到处乱抄,我找了好多基本就两个版本,这个版本我都不知道他的目的是什么,达到一个什么样的效果,其实我们在读文本文件的时候不光是要读他,我们更重要的是读了以后对他进行操作,也就是说二进制文件对我们来说是没用的,我们一定要转成字符型的,对于大文件来说用内存映射是没错的,但这个东西在实际操作的时候是有些问题的,我最近有一个这样的问题,反正才40多M他就不动了,用eclipse就没反应了,后来我就把他拆分开来,但是有一个问题出现了,有时本来是一个完整的字符串,一拆开来读就有可能把这个字符串拆成两面部分了。我有一个题目,是我公司的一道考试题我贴出来大家看看。
移动公司准备针对已经发放出去的139段电话号码进行统计
统计方式为每天将所有已经发放出去的电话进行排序(包括以前发放的和当天发放的号码,合并后进行排序), 排序方式为升序。
并将结果写入至c:\test\result.txt文件中。

在c:\test下有current.txt,内容为至前一天为止的全部发放出去的电话号码的文本文件,每个号码一行。
today.txt中为当天发放的手机号码(139号段),结果请写入result.txt文件中。

电话号码为13900000000, 13912345678, ... 长度为11个数字字符[0至9]


提示:电话号码可能非常多,请考虑程序的可执行性及效率。
编程过程中,可以使用apache commons包中的api (这个建议与考查的内容无关, 至少便于对处理文件关闭进行处理,评分是不会有任何影响)
除以上包以外,请使用j2se6.0的标准内容。引入其他第3方库并不符合考试要求。
axman 2009-02-13
  • 打赏
  • 举报
回复
从整个方案而言这肯定是下三流的方案。一天的log有1-10G那你不能按小时来写log吗?而且每小时的log先预处理一下。

而本贴的主题不是如何产生log,有可能这个log就是客户给你的,如何产生你控制不了。现在就是一个1-10G的文件,要想处理。

每一行log肯定有开始和结束标记。比如<log>any</log>
现在要重 写readLine,就是读到</log>说明读完了一行。然后对这一行进行分解。这是最快的方案,其它任何xml解释器在读10G文件时都是死路一条。
gengzhw 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 wyquan101 的回复:]
log?谁设计的,log都写到一个文件里啊?
不按照大小分割啊。
[/Quote]
生产环境下应用服务器的日志经常很大的,
wyquan101 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 scbb 的回复:]
谢谢楼上各位的回答,

目前用的是org.xml.sax.XMLReader 在做xml解析, 目前只试过512m大小的文件。

org.xml.sax.XMLReader 对于使用它自己还有什么可以优化的吗?

xml是某东西的log,所以会很大。
[/Quote]
log?谁设计的,log都写到一个文件里啊?
不按照大小分割啊。
xueshengshuyan 2009-02-11
  • 打赏
  • 举报
回复
学习,帮顶
luojihaidao 2009-02-11
  • 打赏
  • 举报
回复
学习!!! 顺便留个脚印。
酒剑仙 2009-02-11
  • 打赏
  • 举报
回复
学习
同意LS 和LSS的做法!
hbwhwang 2009-02-11
  • 打赏
  • 举报
回复
你是要对这个XML做什么动作?
如果只是解析,那么建议你采用32楼的办法,自己写专用的解析器,比通用的要快多了
axman 2009-02-11
  • 打赏
  • 举报
回复
读一点处理一点绝对不行.因为xml有起始标记.读一点的时候可能把一个标记分开到两次处理.

自己重写readLine方法,不以\r\n为结尾,以xml的结束标记为结尾.这样每读一行以正则表达式来处理绝对比所有的XML解析器要快上百倍.
爱摸鱼de老邪 2009-02-11
  • 打赏
  • 举报
回复
分段?人家是要解析,不是拷贝,xml是严格要求起始标记的。楼主可以考虑下32楼的方法。
yqlx521 2009-02-11
  • 打赏
  • 举报
回复
jinlai xuexi 进来学习
Landor2004 2009-02-08
  • 打赏
  • 举报
回复
http://download.csdn.net/source/353401
NIO 入门 - IBM 教程.chm

使用nio提高io速度
swoky 2009-02-07
  • 打赏
  • 举报
回复
靠,存的电影啊
kukufly 2009-02-06
  • 打赏
  • 举报
回复
读取xml 恩 帮你顶了
Alien 2009-02-06
  • 打赏
  • 举报
回复
文件确实挺大的,如二楼所说,那样应该是可以解决的
scbb 2009-02-06
  • 打赏
  • 举报
回复

XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");



XMLReaderFactory.createXMLReader();


上面2种都试了下,貌似速度上没有什么区别,几乎完全一样。
(当然第2种的时候,我把xercesImpl.jar删除了,应该是用了jdk标准的了吧?)
是不是我写的有问题?
scbb 2009-02-05
  • 打赏
  • 举报
回复
u
p
zhanghe086 2009-02-03
  • 打赏
  • 举报
回复
这么大的文件,没试过
scbb 2009-02-03
  • 打赏
  • 举报
回复
我试了下,xerces和标准jdk的。
貌似读100M的文件的时间几乎一样。
难道jdk就是用xerces?
加载更多回复(23)
标题SpringBoot钓鱼论坛小程序的设计与实现AI更换标题第1章引言阐述SpringBoot钓鱼论坛小程序的研究背景、意义、国内外现状、研究方法及创新点。1.1研究背景与意义分析钓鱼运动的发展现状及论坛小程序对钓鱼爱好者的价值。1.2国内外研究现状概述国内外钓鱼论坛及小程序的发展现状和技术应用。1.3研究方法以及创新点介绍SpringBoot技术及本论文的研究方法和创新之处。第2章相关理论总结和评述与SpringBoot钓鱼论坛小程序开发相关的理论。2.1SpringBoot框架概述介绍SpringBoot框架的核心特性及其在Web开发中的应用。2.2前端技术基础阐述小程序开发中常用的前端技术,如HTML、CSS、JavaScript。2.3数据库技术介绍数据库设计原则及MySQL数据库在论坛小程序中的应用。第3章SpringBoot钓鱼论坛小程序设计详细介绍SpringBoot钓鱼论坛小程序的整体设计方案。3.1系统架构设计系统的整体架构,包括前端、后端和数据库的交互。3.2功能模块设计详细设计用户管理、帖子发布、评论互动等核心功能模块。3.3数据库设计阐述数据库表结构、字段设计以及数据关系。第4章SpringBoot钓鱼论坛小程序实现介绍SpringBoot钓鱼论坛小程序的具体实现过程。4.1开发环境搭建介绍开发所需的软件、硬件环境及配置步骤。4.2核心功能实现阐述用户注册登录、帖子发布与展示、评论与回复等功能的实现。4.3界面设计与优化介绍小程序界面的设计原则、实现效果及优化措施。第5章系统测试与性能分析对SpringBoot钓鱼论坛小程序进行系统测试和性能分析。5.1测试环境与方法介绍测试所需的硬件、软件环境及测试方法。5.2功能测试与结果分析对各个功能模块进行测试,并分析测试结果。5.3性能测试与优化建议对系统进行性能测试,提出优化建议。第6章结论与展望总结S

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧