在Java中保存数据2D数组的最佳方法



我有一个关于将二维数组的值保存到Hardisk的问题。 我构建了 5000x5000 项目相似性表(浮点型),我想存储它,因为它将继续使用。 我尝试通过格式 index1,index2,value+ 将它们保存到.txt文件中,它们的大小增长到 250MB(大约 2500 万行)。 有什么方法可以减小它的大小吗?如果有人介意帮助我,我会很高兴

  1. 我们可以使用 2 个整数(行数和列数)在文件本身的开头写入矩阵的大小,而不是存储每个单元格的索引,即 index1 和 index2。在读取时使用此信息,以了解何时完全读取矩阵的一行。

  2. 我们可以Float.floatToIntBits(float)方法将 IEEE-754 表示形式转换为整数并将整数序列化为 4 个字节,而不是写入浮点数的字符串值

这会将 5000 x 5000 矩阵的大小减小到 ~ 100MB

您可以使用

Map<Float, List<Float>>

类型

如@Satish所说,它至少需要 5000*5000*4(浮点型字节)= 100,000,000 字节或 100000 KB 或 100 MB。

数组是否

填充稀疏,您可以考虑只保存实际具有值的数据点。然后,由 x/y 坐标键入的Map可以大大减少大小。

否则,处理 100-250 MB 的文件可能有点困难。为什么不使用某种数据库持久性?有许多 SQL 或非 SQL 数据库可以为您优化存储操作。

finaly 我尝试使用ObjectOutputStream将它们以二进制格式存储,然后将文件减少到100mb。 我在这里找到了本教程,它按预期工作。 它还可以节省内存消耗。非常感谢:)

最新更新