Java io 大文本数据 缩放

颜可 发布于 2014/10/09 21:14
阅读 385
收藏 0

 现在是:
jsp --> action --> service --> 查询本地硬盘文件
文件是文本,里面放着一条条数据
数据条数不定,可能从几百条到100w条。

需要将这几百条到100w条的数据读取后显示在jsp上,并支持缩放功能。由于100w级别这样的数据,用一页是显示不完的,所以决定一页最多显示1000条,也就是从这100w条中抽取。

在页面上显示用的是Highcharts,将这1000条数据的行号和值传给jsp,然后用Highcharts画出曲线。

那么问题就是,抽取这100w条数据怎么抽取。

我现在的做法是:
先计算出要抽取那些行,存入list。然后一行一行读,读到哪一行是属于list的,就将这行数据存入一个list。
最后把100w行读完了,要显示的行数就存完了,返回到页面上去。

抽取的方案是:比如100w条数据,只显示1000条在页面上的话,就是取一条后跳1000条再取,这样一共取1000条。缩放时也是一样,比如要查看20w到50w之间的数据,就计算跳多少条,然后取1000条出来。


由于要支持缩放,那么每次缩放,就要重新计算读取哪1000行数据,然后同样又读取那个文本数据的100w行数据,筛选出要返回的行数据。
这样的话,100w行的数据,缩放一下要等个几秒钟才能显示出来。
第一次加载用几秒钟可以接受,可是缩放想做得更快,不知有何良策?


加载中
0
h
hao5ang

如果每行的长度都相等的话,可以考虑使用类:

RandomAccessFile 

http://stackoverflow.com/questions/18933234/jump-to-specific-line-in-txt-file-where-all-lines-are-of-equal-length-in-java

如果是结构化数据的话,感觉放到数据库,为每行加一个索引的行号,效率是相当高的(最好在写文件的时候直接到数据库).

颜可
颜可
谢谢回答! 不过我的数据文件不是每行长度一样的…… 也不能写入数据库,这是个新增的功能,这么做改动太大了……
0
魚魚
魚魚
你要是能估计出每行最大有多长,然后每行不够长度的就用空格补齐,保证每行的长度一致,这样你就可以按照行计算出长度跳读了。
这样有两个弊端,
1.你的原始文件的内容会因为增大了空格个变大。
2.读取的每行你都要去除末尾的空格字符。
返回顶部
顶部