android 序列化对象Serializable
时间: 2023-12-16 08:02:47 浏览: 90
Serializable是Java的一个接口,可以将一个对象转化成一个字节序列,便于在网络和存储设备中传输和存储。Android也支持Serializable接口,可以使用它来序列化对象。在Android中,Serializable接口是通过ObjectOutputStream和ObjectInputStream类实现的。
要使一个类序列化,需要实现Serializable接口,并定义一个名为serialVersionUID的静态常量。这个常量用于标识对象的版本,如果对象的版本不同,那么反序列化会失败。
下面是一个Android中使用Serializable接口的例子:
```java
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
```
在这个例子中,Person类实现了Serializable接口,并定义了一个serialVersionUID常量。我们可以使用ObjectOutputStream类将Person对象序列化:
```java
Person person = new Person("Tom", 18);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(person);
byte[] bytes = byteArrayOutputStream.toByteArray();
```
在这个例子中,我们创建了一个Person对象并将它序列化到一个字节数组中。我们可以使用ObjectInputStream类将字节数组反序列化为一个Person对象:
```java
Person person = null;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
person = (Person) objectInputStream.readObject();
```
在这个例子中,我们创建了一个ByteArrayInputStream对象并将字节数组传递给它。接下来,我们使用ObjectInputStream类从ByteArrayInputStream中反序列化Person对象。最后,我们将反序列化后的Person对象赋值给person变量。
需要注意的是,Serializable接口只适用于Java环境,不适用于其他平台。在Android中,如果需要将对象序列化到磁盘,建议使用Parcelable接口。Parcelable接口比Serializable接口更加高效,因为它可以直接将对象转化成二进制数据,而不需要将对象转化成Java对象。
阅读全文