硬编码与文件输入的效率

时间:2012-06-28 13:54:56

标签: java file-io machine-learning

我正在开发一个Java机器学习项目,它将涉及一个非常大的模型(支持向量机的输出,对于那些熟悉它的人),需要经常检索以供最终用户。模型的大部分由相当小的对象的大型二维数组组成。

不幸的是,我不知道该模型到底有多大(到目前为止我一直在使用基准数据,而我实际上将使用的数据还没有准备好),也没有我知道它将运行的机器的规格,因为它也在空中。

我已经有了一种方法将模型作为字符串写入文件,但写入过程需要花费大量时间,而读取过程需要花费大约一分钟的时间。我想减少那个时间,所以我有一个明亮或疯狂的想法,将模型写入.java文件,以便可以编译然后运行以生成完全形成的模型。 / p>

我的问题是,在假设模型大小约为1 MB的情况下,用Java存储和编译模型要比从文件中读取模型快得多吗?还有一些原因我还没有看到这可能是一个非常愚蠢的想法,我不应该在任何情况下追求这个想法吗?

感谢您提供给我的任何想法。

编辑:显然尝试自动将数千个值写入代码中,这种方法比编译器可以处理的方法大约两个数量级。好吧,生活和学习。

4 个答案:

答案 0 :(得分:2)

您可以考虑为数据创建紧凑的二进制格式,而不是写入字符串或java文件。

答案 1 :(得分:1)

恕我直言的问题是,由于IO或计算时间(=> CPU),文件的读取时间很长。如果后来是这样的话那么运气不好。如果您的IO(例如硬盘)是原因,那么您可以压缩文件并在/读取后提取它。 Java当然有(当然)ZIP支持(即使对于Streams)。

答案 2 :(得分:1)

  

使用Java存储和编译模型的速度要快得多   而不是从文件中读取它?

这取决于您将自定义数据结构设计为包含模型的方式。

答案 3 :(得分:0)

我同意上面给出的答案,使用二进制输入格式。让我们先尝试优化它。你能提供一些信息吗? ...或者你用谷歌搜索二进制数据? ......缓冲吗?等?

编写一个.java文件并编译它会很安静有趣......但它必然会在某些时候给出你的问题。但是,我认为你会发现它比优化的二进制格式略慢,但比基于文本的输入更快。

另外,对于早期优化要非常小心。通常,“高度可配置”和“快速致盲”是互斥的。相反,首先让一切工作,然后使用分析器来优化应用程序的非常慢的部分。