java一次性read3M的数据_java – 使用BufferedReader的低性能

我正在使用BufferReader.readlLine()逐行处理许多文本文件.

两个文件具有相同的大小130MB,但一个需要40秒才能处理,而其他文件需要75秒.

我注意到一个文件有180万行,而其他文件有210万行.但是,当我尝试处理具有相同大小的300万行的文件时,需要30分钟来处理.

所以我的问题是:

>这是因为寻找缓冲区读取器的时间(我想知道BufferedReader如何工作或逐行解析文件?)

>有没有什么方法可以更快地逐行读取文件?

好的朋友,我提供更多细节.

我正在使用正则表达式将该行拆分为三个部分,然后使用SimpleUnsortedWriter(由Cassandra提供)我将其作为键,列和值写入某个文件.处理完16MB数据后,它会刷新到磁盘.

但是处理逻辑对于所有文件都是相同的,甚至一个大小为330MB的文件,但是在30秒内没有大约100万行的处理逻辑.可能是什么原因?

deviceWriter = new SSTableSimpleUnsortedWriter(

directory,

keyspace,

"Devices",

UTF8Type.instance,

null,

16);

Pattern pattern = Pattern.compile("[\\[,\\]]");

while ((line = br.readLine()) != null)

{

//split the line i n row column and value

long timestamp = System.currentTimeMillis() * 1000;

deviceWriter .newRow(bytes(rowKey));

deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);

}

已将-Xmx256M更改为-Xmx 1024M,但无论如何都没有帮助.

更新:根据我的观察,当我写入缓冲区(在物理内存中)时,就像没有.写入缓冲区正在增加新的写入需要时间. (这是我的猜测)

请回复.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值