一个关于hessian的疑问

hessian是一个java序列化库。dubbo底层用这个库序列化java对象。
hessian序列化需要实现Serializable接口,否则就会抛出异常。

抛出异常

我的疑问是:hessian 序列化对象一定要实现 Serializable 接口吗?
实际上我通过阅读源码,发现hessian序列化完全走的是自己的一套,完全不涉及Serializable原生的那一套东西。所以为啥要实现 Serializable 接口,根本没这必要啊?

protected Serializer getDefaultSerializer(Class cl) {
        if (this._defaultSerializer != null) {
            return this._defaultSerializer;
        } else if (!Serializable.class.isAssignableFrom(cl) && !this._isAllowNonSerializable) {
            throw new IllegalStateException("Serialized class " + cl.getName() + " must implement java.io.Serializable");
        } else {
            return new JavaSerializer(cl, this._loader);
        }
    }

根据源码看到hessian 是用这个getDefaultSerializer方法,根据class来获得对应的Serializer。当_isAllowNonSerializablefalse并且该类没有实现Serializable接口的时候就会抛出之前提到的IllegalStateException异常。难道没实现Serializable 的类连获得自己的Serializer都不行吗。看起来很像一个保护型的代码,我很想做一个实验就是把这个段代码给删了来验证我之前的猜想。所以就用了在修改jar包中的class
的方法替换了jar。
最后实验下来,结论是:hessian 序列化对象不用实现Serializable接口。因为即使我把这个抛出异常的条件删掉,也不不会有其他异常。
但是考虑到hessian的作者也许不会就这样放一个无用的判断在源码中,所以也许这样做事另有深意?我还是不得而知。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容