Java对象怎么序列化和反序列化 20

 我来答
千锋教育
2015-12-06 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
import java.io.Serializable;

/*
 * NotSerializableException:未序列化异常
 * 
 * 类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类    将无法使其任何状态序列化或反序列化。
 * 该接口居然没有任何方法,类似于这种没有方法的接口被称为标记接口。
 * 
 * java.io.InvalidClassException: 
 * cn.itcast_07.Person; local class incompatible: 
 * stream classdesc serialVersionUID = -2071565876962058344, 
 * local class serialVersionUID = -8345153069362641443
 * 
 * 为什么会有问题呢?
 *  Person类实现了序列化接口,那么它本身也应该有一个标记值。
 *  这个标记值假设是100。
 *  开始的时候:
 *  Person.class -- id=100
 *  wirte数据: oos.txt -- id=100
 *  read数据: oos.txt -- id=100
 * 
 *  现在:
 *  Person.class -- id=200
 *  wirte数据: oos.txt -- id=100
 *  read数据: oos.txt -- id=100
 * 在实际开发中,可能还需要使用以前写过的数据,不能重新写入。怎么办呢?
 * 回想一下原因是因为它们的id值不匹配。
 * 每次修改java文件的内容的时候,class文件的id值都会发生改变。
 * 而读取文件的时候,会和class文件中的id值进行匹配。所以,就会出问题。
 * 但是呢,如果有办法,让这个id值在java文件中是一个固定的值,这样,你修改文件的时候,这个id值还会发生改变吗?
 * 不会。现在的关键是我如何能够知道这个id值如何表示的呢?
 * 不用担心,不用记住,也没关系,点击鼠标即可。
 * 难道没有看到黄色警告线吗?
 * 
 * 要知道的是:
 *  看到类实现了序列化接口的时候,要想解决黄色警告线问题,就可以自动产生一个序列化id值。
 *  而且产生这个值以后,我们对类进行任何改动,它读取以前的数据是没有问题的。
 * 
 * 注意:
 *  一个类中可能有很多的成员变量,有些我不想进行序列化。请问该怎么办呢?
 *  使用transient关键字声明不需要序列化的成员变量
 */
public class Person implements Serializable {
private static final long serialVersionUID = -2071565876962058344L;

private String name;

// private int age;

private transient int age;

// int age;

public Person() {
super();
}

public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
百度网友9308069
2012-06-03 · TA获得超过1万个赞
知道大有可为答主
回答量:3947
采纳率:89%
帮助的人:1912万
展开全部
在Java SE和EE中
用ObjectOutStream序列化到数据形式
和ObjectInputStream从数据恢复对象,反序列化。
自定义类实现implements Serializable接口后,就可对其对象进行序列化了
在Java ME等中需要自己用DataOutputStream、DataInputStream设计序列化格式。同样可以实现对象的序列化。
序列化的目的是为了交换数据,只要所需要的数据传递过去了就行
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莔囧冏冋冂
2012-06-03 · TA获得超过642个赞
知道小有建树答主
回答量:411
采纳率:100%
帮助的人:548万
展开全部
类实现 Serializable 接口,然后用ObjectOutputStream、ObjectInputStream读写对象
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友325a3ca90
2012-06-03 · TA获得超过209个赞
知道小有建树答主
回答量:493
采纳率:0%
帮助的人:283万
展开全部
对象数组。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bianweiall
2012-06-03 · TA获得超过168个赞
知道小有建树答主
回答量:186
采纳率:0%
帮助的人:114万
展开全部
推荐用jackson json吧,百度搜索用法一大堆
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式