java原生序列化中反序列化时,是如何创建对象的

看一下源代码

生成对象的

private Object readOrdinaryObject(boolean unshared)
        throws IOException
    {
   
       		...
            obj = desc.isInstantiable() ? desc.newInstance() : null;
       		...
        return obj;
    }


Object newInstance()
        throws InstantiationException, InvocationTargetException,
               UnsupportedOperationException
    {
   
        requireInitialized();
        if (cons != null) {
   
            try {
   
                return cons.newInstance();//走到这里 cons是对象obj所属类父类class java.lang.Object的无参构造函数
            } catch (IllegalAccessException ex) {
   
                // should not occur, as access checks have been suppressed
                throw new InternalError(ex);
            }
        } else {
   
            throw new UnsupportedOperationException();
        }
    }

生成构造函数cons源码如下

private Object readOrdinaryObject(boolean unshared)
        throws IOException
    {
   
    		...
      		ObjectStreamClass desc = readClassDesc(false);//这里
       		...
            obj = desc.isInstantiable() ? desc.newInstance() : null;
       		...
        return obj;
    }

private ObjectStreamClass readClassDesc(boolean unshared)
        throws IOException
    {
   
        byte tc = bin.peekByte();
        ObjectStreamClass descriptor;
        switch (tc) {
   
            case TC_NULL:
                descriptor = (ObjectStreamClass) readNull();
                break;
            ...
            case TC_CLASSDESC:
                descriptor = readNonProxyDesc(unshared
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值