开发者社区> 问答> 正文

Java io 大文本数据 缩放:报错

 现在是:
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行的数据,缩放一下要等个几秒钟才能显示出来。
第一次加载用几秒钟可以接受,可是缩放想做得更快,不知有何良策?


展开
收起
kun坤 2020-06-06 16:29:53 393 0
1 条回答
写回答
取消 提交回答
  • 如果每行的长度都相等的话,可以考虑使用类:

    RandomAccessFile 

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

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

    ######谢谢回答! 不过我的数据文件不是每行长度一样的…… 也不能写入数据库,这是个新增的功能,这么做改动太大了……######你要是能估计出每行最大有多长,然后每行不够长度的就用空格补齐,保证每行的长度一致,这样你就可以按照行计算出长度跳读了。
    这样有两个弊端,
    1.你的原始文件的内容会因为增大了空格个变大。
    2.读取的每行你都要去除末尾的空格字符。
    2020-06-06 16:29:57
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
多IO线程优化版 立即下载