为了账号安全,请及时绑定邮箱和手机立即绑定

重写readObject()方法时,怎么确定this.stuage=s.readInt();一定就是stuage 的反序列化?

this.stuage=s.readInt();
可以使用this.stuage=s.readInt();代替吗?
怎么知道反序列化的元素是stuaged的?


正在回答

2 回答

stuage是通过s.writeInt(stuage)写入的,这里只有一个transient int型,读的时候自然没问题,如果有两个transient int型是按照写入的顺序读取的。假设stusex=1,stuage=20,比如写入顺序是:

s.writeInt(stusex);

s.writeInt(stuage);

第一次执行s.readInt()会读取1,

再次执行s.readInt()会读取20,

如果还想再执行s.readInt()会报java.io.EOFException异常。


1 回复 有任何疑惑可以回复我~
#1

每天一学 提问者

非常感谢!
2016-10-19 回复 有任何疑惑可以回复我~

反序列化就是把byte重新转为原本类型

序列化之后是byte格式的,readInt正好可以读取byte类型将其转为int型,底层机制是通过位运算实现的,你可以自己去看,int32位通过左移24位 左移16位 左移8位 左移0位四次读取,再具体我也忘了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

重写readObject()方法时,怎么确定this.stuage=s.readInt();一定就是stuage 的反序列化?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信