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

来源:6-2 transient及ArrayList源码分析

每天一学

2016-07-07 15:50

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


写回答 关注

2回答

  • 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-10-19 13:30:18

    共 1 条回复 >

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

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

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

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133754 学习 · 1030 问题

查看课程

相似问题