1

使用 java 语言,我阅读了包含数字的文本文件。有 TB 的数据和数千亿的数字。

目标是尽可能快地获取数据,并尽量减少 GC 活动。我想将文本直接解析为基元(double、float、int)。

直接我的意思是:

  • 无需实例化任何瞬态辅助对象
  • 在 java.lang.Double、java.lang.Float 中没有装箱数据...
  • 无需创建瞬态 java.lang.String 实例(如果要调用 JDK Double.parseDouble(...),这是一个强制性步骤)

到目前为止,我一直在使用 javolution 框架:

double javolution.text.TypeFormat.parseDouble(CharSequence sequence);

我查看了 javolution 代码,它确实没有分配任何瞬态对象。并且因为它接受一个 CharSequence,您可以呈现从数据文件中解码的字符,而无需实例化瞬态字符串。

有替代方案或更好的方法吗?

4

2 回答 2

2

该方法Double.parseDouble(String) 确实在后台实例化了一个对象,但它使用缓存,从字符串返回双重读取。
这个答案提供了更多细节。

对于其他人:Javolution包似乎是为实时性能而编写的,因此它似乎是一个合适的包。

于 2012-12-06T11:21:45.827 回答
1

StreamTokenizer,在这里考察,或许值得剖析。它将十进制数解析为double但不处理科学记数法。

于 2012-12-06T11:32:45.160 回答