我使用 Objectify 5.0 与GAE数据存储进行交互。我有一个像这样的实体类:
@Entity
public class A {
@Id long id;
int[][] data = new int[365][];
}
但是当我尝试保存实体时,我遇到以下错误:java.util.ArrayList is not a supported property type
。
处理具有数组字段的实体的最佳方法是什么?是否有@Mapify
/ @Stringify
替代自定义序列化或存在更好的问题解决方案?
答案 0 :(得分:1)
数据存储区本身不存储二维数组。这里发生的事情是Objectify正在将int[][]
转变为ArrayList<ArrayList<Long>>
而本机API拒绝它。
如果您想存储int[][]
,您需要弄清楚如何将该结构转换为数据存储区可以处理的内容。一个选项是具有一个字段的对象数组,该字段本身是一个int数组。基本上Foo[]
其中Foo
有一个字段,int[]
。这不一定是节省空间的,序列化可能很昂贵,特别是对于大型矩阵。
另一种选择是使用@Serialize
。它应该在空间上合理有效。
如果你想要最佳存储空间,请弄清楚如何自己压缩它 - 可能是byte[]
。您可以选择一种优化稀疏度预期水平的算法。非常稀疏的多维数组最好存储为一系列坐标。