Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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 Android上的数组反序列化_Java_Android - Fatal编程技术网

Java Android上的数组反序列化

Java Android上的数组反序列化,java,android,Java,Android,我目前正在开发一个大型应用程序,我发现了一些细节。可以序列化数组并将它们放入一个捆绑包中。然后把它放在一个意图中并开始活动。但是在接收端,我必须通过一个痛苦的两步过程来反序列化数组 MyObj[] data = (MyObj[])bundle.getSerializable("key"); // doesn't work Object[] temp = (Object[])bundle.getSerializable("key"); MyObj[] data2 =

我目前正在开发一个大型应用程序,我发现了一些细节。可以序列化数组并将它们放入一个捆绑包中。然后把它放在一个意图中并开始活动。但是在接收端,我必须通过一个痛苦的两步过程来反序列化数组

     MyObj[] data = (MyObj[])bundle.getSerializable("key"); // doesn't work

     Object[] temp = (Object[])bundle.getSerializable("key");
     MyObj[] data2 = (MyObj[])temp, // doesn't work

     MyObj[] data3 = new MyObj[temp.length]; // does work
     for(int i = 0; i < temp.length; i++) {
          data3[i] = (MyObj)temp[i];
     }
MyObj[]数据=(MyObj[])bundle.getSerializable(“key”);//不起作用
Object[]temp=(Object[])bundle.getSerializable(“key”);
MyObj[]数据2=(MyObj[])温度,//不工作
MyObj[]data3=新的MyObj[temp.length];//行得通
对于(int i=0;i

我必须在数组中循环的原因是什么?

您也可以使用JSON,通过它可以非常容易地序列化和反序列化数组,并且代码中没有任何难看的强制转换:

Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};

// Serialization
gson.toJson(ints);     ==> prints [1,2,3,4,5]
gson.toJson(strings);  ==> prints ["abc", "def", "ghi"]

// Deserialization
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); 

示例来源:

您还可以使用JSON,通过它可以非常轻松地序列化和反序列化数组,并且代码中没有任何难看的强制转换:

Gson gson = new Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {"abc", "def", "ghi"};

// Serialization
gson.toJson(ints);     ==> prints [1,2,3,4,5]
gson.toJson(strings);  ==> prints ["abc", "def", "ghi"]

// Deserialization
int[] ints2 = gson.fromJson("[1,2,3,4,5]", int[].class); 

例如:

问题是,如果您有一个
对象的数组
,将其转换为
MyObj
的数组,编译器将必须检查并验证数组中每个项的类,以允许转换为
MyObj[]
。Java语言设计者决定不这样做,并强迫程序员将其写出来。例如:

Object[] objs = new Object[] { "wow", 1L };
// this isn't allowed because the compiler would have to test each object itself
String[] strings = (String[]) objs;
// you wouldn't want an array access to throw the ClassCastException
String foo = strings[1];
因此Java语言强制您自己进行循环

Object[] objs = new Object[] { "wow", 1L };
String[] strings = new String[objs.length];
for (int i = 0; i < objs.length; i++) {
    // this can then throw a ClassCastException on this particular object
    strings[i] = (String) objs[i];
}

请参阅:

问题是,如果您有一个
对象数组
,将其转换为
MyObj
数组,编译器必须检查并验证数组中每个项的类,以允许转换为
MyObj[]
。Java语言设计者决定不这样做,并强迫程序员将其写出来。例如:

Object[] objs = new Object[] { "wow", 1L };
// this isn't allowed because the compiler would have to test each object itself
String[] strings = (String[]) objs;
// you wouldn't want an array access to throw the ClassCastException
String foo = strings[1];
因此Java语言强制您自己进行循环

Object[] objs = new Object[] { "wow", 1L };
String[] strings = new String[objs.length];
for (int i = 0; i < objs.length; i++) {
    // this can then throw a ClassCastException on this particular object
    strings[i] = (String) objs[i];
}

请参阅:

这是一个普通的Java问题,而不是一个特定于Android的问题。在谷歌上搜索“java铸造阵列”将为您的问题提供答案。Java根本不允许向下转换数组。与此相关的是一个一般的Java问题,而不是一个特定于Android的问题。在谷歌上搜索“java铸造阵列”将为您的问题提供答案。Java根本不允许向下转换数组。与此相关,我已经使用Gson与服务器进行json/rest通信,它比Java去序列化慢。所以我想我使用了casting,我已经使用Gson与服务器进行了json/rest通信,这比java的de/serialization要慢。所以我想我用的是铸造。