问答详情
源自:6-2 transient及ArrayList源码分析

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

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


提问者:每天一学 2016-07-07 15:50

个回答

  • tlojy
    2016-08-15 16:06:35
    已采纳

    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异常。


  • 染红_街道
    2016-07-08 17:25:54

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

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