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要慢。所以我想我用的是铸造。