当前位置:编程学习 > JAVA >>

老大让我把一个1G的记事本文件排序。。知道的教教

如题。。谢谢了。。具体点最好··· --------------------编程问答-------------------- 什么意思??? --------------------编程问答-------------------- 这个1G的文件是有一定顺序给写进去的吧。。

我以前处理过百来兆的,方法是把这些数据用文件流给读出来,然后每条做成一个数据库记录,然后插到数据库里面,用sql的排序,然后再从结果集里面导出来,要是还存成文件,那就再写回去,不存文件,那就按照别的办法处理。

一次性加载全部的文件,或许JVM内存会吃不消的,你可以部分部分的去加载。具体这个方法,你可以去百度一下。


--------------------编程问答--------------------
引用 2 楼 yexiongmybh 的回复:
这个1G的文件是有一定顺序给写进去的吧。。

我以前处理过百来兆的,方法是把这些数据用文件流给读出来,然后每条做成一个数据库记录,然后插到数据库里面,用sql的排序,然后再从结果集里面导出来,要是还存成文件,那就再写回去,不存文件,那就按照别的办法处理。

一次性加载全部的文件,或许JVM内存会吃不消的,你可以部分部分的去加载。具体这个方法,你可以去百度一下。

不错的办法,最后合并一个文件时,可以用io中的SequenceInputStream类 --------------------编程问答-------------------- 分而治之的思想 --------------------编程问答--------------------
引用 4 楼 x19881216 的回复:
分而治之的思想


+1 --------------------编程问答-------------------- 都是高手,学习了。

恭喜楼主,祝楼主好运 --------------------编程问答--------------------
引用 2 楼 yexiongmybh 的回复:
这个1G的文件是有一定顺序给写进去的吧。。

我以前处理过百来兆的,方法是把这些数据用文件流给读出来,然后每条做成一个数据库记录,然后插到数据库里面,用sql的排序,然后再从结果集里面导出来,要是还存成文件,那就再写回去,不存文件,那就按照别的办法处理。

一次性加载全部的文件,或许JVM内存会吃不消的,你可以部分部分的去加载。具体这个方法,你可以去百度一下。

这个是最简单快捷的方法 --------------------编程问答--------------------
引用 4 楼 x19881216 的回复:
分而治之的思想
顶一个。 --------------------编程问答-------------------- 楼主要写出文件的具体内容结构。

超大文件的排序,算法上面,可以参考数据结构中,外部排序,的相关内容。

当然,先拆分,后组合,也是个不错的方案。

如果,不要求速度的话,解析文件,插入数据,排序,生成排序问。
是个和好的方案。

我的方案,是,先拆分,后组合。
估算时间:硬盘读写速度,按 60MB/s的读取速度,40MB/s的写入速度。
那么,读取1G文件,大概需要17s,而写入大概要25s时间.

先读取文件的部分数据到内存当中,排序,并生成临时文件。
这样,1G文件,就会被拆分成多个分别排序的小文件。
然后,取其中两个小文件,合并成一个大点的排序文件,如此反复,最终生成1G的大排序文件。
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,