向java函数传递大量数据的有效方法是什么?

向java函数传递大量数据的有效方法是什么?,java,methods,parameter-passing,Java,Methods,Parameter Passing,我有一个java函数,它可以处理500MB的海量数据。我必须将这500MB的数据传递给java函数,并在处理完java函数后返回数据 我的表格式如下: col1 col2 col3 col4 col5 col6 3 5 2 5 1 6 7 5 6 8 3 8 5 3 7 9 8 1 我脑子里没有什么想法,但不知道到底哪一个是有效的,以及如何实现,比如我需要哪个JavaAPI 将数据转换为ja

我有一个java函数,它可以处理500MB的海量数据。我必须将这500MB的数据传递给java函数,并在处理完java函数后返回数据

我的表格式如下:

col1  col2 col3 col4 col5 col6
 3     5    2     5    1   6
 7     5    6     8    3   8
 5     3    7     9    8   1
我脑子里没有什么想法,但不知道到底哪一个是有效的,以及如何实现,比如我需要哪个JavaAPI

  • 将数据转换为java对象(每行一个相同类的对象)。然后将对象作为数组传递给java函数
  • 从表格数据准备XML文档,并将XML文档传递给java函数。内部java函数从XML文档中提取对象
  • 将表格数据保存到文件中,并将该文件作为参数输入java函数

  • 我脑子里有这些想法,如果有人能提供上述3种方法的优缺点或建议一些新方法,我将不胜感激。

    传递数组只会传递一个引用,该引用不涉及任何数据复制,因此尽可能高效。对数组的任何修改都将在引用的数组上进行。不需要归还任何东西

    如果从文件或流中读取数据,则可以将文件映射到内存中。所以它不会读取整个文件。查看

    由于您有大量表格格式的数据,您是否考虑过使用Java DB(数据库)?当然,这取决于您将要进行的处理类型、开发的时间以及您对数据库/SQL的了解程度,但听起来您将逐行读取数据,而数据库是一种很好的方法,尤其是对于大量数据

    Java教程中有关于JDBC API的信息,以及如何使用它的步骤:

    从Java轨迹:

    JDBCAPI是一种JavaAPI,可以访问任何类型的表格数据,特别是存储在关系数据库中的数据

    要记住的一些事情:

    • 您必须了解/学习SQL或其他查询语言
    • 您必须设计并构建数据库的结构,尽管您可能可以使用与您在XML文件中计划的结构类似的结构
    • 钥匙!键是数据库中每一行的唯一标识符,如ID号。我强烈建议您添加一个单独的字段/列用作键,特别是如果您是数据库新手的话。它们会少量增加数据库的内存开销,但作为回报,您不必担心识别唯一的行,并且可以快速返回到已搜索的行
    • 您可以选择要输入的数据-不要输入超过您需要的数据

    如果你想用java函数/方法处理数据,就要考虑数据块一次处理。同样,您可以根据一些计算来决定块的大小,比如从10KB开始,然后查看性能并计算。这取决于执行环境。


    有几种方法可以从文件/流/数据库(即使是远程服务器)获取数据块。您需要发布有关问题的更多详细信息,以获得更好的建议。

    为了给出一个好的答案,需要更多的详细信息。你从哪里获得数据?这个函数应该和它有什么关系?我想你必须测试你的想法。这取决于您想要执行的处理操作。请纠正一下,Java中没有函数,只有方法@GPRathour在技术上和历史上都是正确的(如果您谈到Java语言的话),尽管您可能会认为静态方法用于函数的目的。在任何情况下,术语现在都是一个相互冲突的大混乱…@GPRathour是的。。。Java静态方法实际上是一个函数。让我们不要卷入命名之争。非常感谢你的建议。如果我要调用的函数在另一台服务器上,请告诉我此方法是否适用?@SurjyaNarayanaPadhi如果您需要将500 MB的内存传递给另一台服务器进行方法调用,我会郑重建议您仔细研究一下您的体系结构。不,您不希望通过某些RPC机制传递500MB。@TassosBassoukos这不一定是架构问题。有许多应用程序需要传输大量数据作为其需求的一部分(例如视频流服务)。我建议您使用输入/输出流,这是用于数据传输的预期Java机制。使用stream you,您可以控制数据流,在发送/接收数据之前/之后对其进行操作,等等@eitanfar我知道这是有必要的(我在98年在不同国家的气象模型的不同阶段之间转移了该数量-有趣的时代)-只是把它作为函数调用是。。。次优,主要是从内存使用的角度来看。我高度支持这一想法,尽管我从问题描述中解释说,进行处理的方法已经存在,因此不适用于数据库。因此,这也需要重新设计现有的代码。