Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java需要帮助反序列化多维数组_Java_Arrays_Serialization - Fatal编程技术网

Java需要帮助反序列化多维数组

Java需要帮助反序列化多维数组,java,arrays,serialization,Java,Arrays,Serialization,我正在编写一个模块来序列化其他模块,我已经让所有东西都正常工作了,只是我不确定应该如何反序列化多维数组 问题是,我需要反序列化类似的东西(每个节点都有其他属性,比如objects SUID,为了简单起见,我已经排除了这些属性) 问题是我不知道如何通过编程创建深度为x的数组?也就是说,如果我必须按自己的方式来做,可能会是这样: switch(iArrayDepth) { case 1: return new ArrayList<Integer>(); c

我正在编写一个模块来序列化其他模块,我已经让所有东西都正常工作了,只是我不确定应该如何反序列化多维数组

问题是,我需要反序列化类似的东西(每个节点都有其他属性,比如objects SUID,为了简单起见,我已经排除了这些属性)

问题是我不知道如何通过编程创建深度为x的数组?也就是说,如果我必须按自己的方式来做,可能会是这样:

switch(iArrayDepth)
{
    case 1:
        return new ArrayList<Integer>();
    case 2:
        return new ArrayList<ArrayList<Integer>>();
    case 3:
        return new ArrayList<ArrayList<ArrayList<Integer>>>();
etc...
}
开关(iArrayDepth)
{
案例1:
返回新的ArrayList();
案例2:
返回新的ArrayList();
案例3:
返回新的ArrayList();
等
}
一定有更好的方法:S


另一个问题是,当我需要取消此数组的装箱并使其成为基本类型的多维数组时

您可以使用创建一个数组,该数组的类型和维度在编译时是未知的。例如,下面创建一个3 x 4 x 5的
int
数组

Object array = Array.instance(Integer.CLASS, 3, 4, 5);


这也解决了问题的第二部分。

ArrayList不是数组。泛型在运行时具有类型擦除功能,因此您尝试使用开关执行的操作在运行时毫无意义

如果您想创建一个列表,只需创建一个没有泛型的列表即可

List list = new ArraysList();
如果要创建特定类型的数组,可以使用数组

Object array = Arrays.newArray(arrayType, arrayDepth);
我会重新考虑你的文件格式。它对于您传输的数据量来说是冗长的

像这样的怎么样

int[[ 2
1,2
3,4
这将以更紧凑的格式传递相同的信息

List list = new ArraysList();
Object array = Arrays.newArray(arrayType, arrayDepth);
int[[ 2
1,2
3,4