源码,反码,补码序列化反序列化

机器数的源码:最高位存放符号(0表示正,1表示负),应该不限制位数。

机器数负数的反码:除符号位外,全部取反(1变为0,0变为1)。

机器数负数的补码:反码加1。

 

机器数正数没有反码补码。

java中byte:(一个字节是8位二进制数)

 

  • byte 数据类型是8位、有符号的,以二进制补码表示的整数;
  • 最小值是 -128(-2^7)
  • 最大值是 127(2^7-1)
  • 默认值是 0

最小值的-128的源码反码补码表示问题待解决

 

byte不是专门用来表示-128到127的整数的,byte是用来处理IO流和程序逻辑数据类型(字符串,日期,复合对象等)的,作为它们的中介而存在,是物理数据转化为程序的逻辑数据的最后一层物理表现形式。字符串直接用getBytes()方法可得到。

在编程中,逻辑数据到byte的转化称为序列化(其他语言的序列化中是不是用byte这个单词表示二进制数(源码反码无所谓肯定还会经过处理的)?是的话byte不知道是不是也是8位?),反过来叫反序列化。

es之所以保存的数据要求是JSON逻辑格式序列化后的,而不是bean逻辑格式序列化后的,因为序列化保存对象还需要保存对象的类型信息等。那么springMVC/Struts等框架给浏览器返回的到底是bean还是json或是xml呢?想法测一下

 

虽然序列化和反序列化常用在传输前后,但序列化反序列化本身不针对远程还是本地,仅仅是为了保证序列化时用的类和反序列化用的类一致而已。RPC一般客户端是直接依赖远程的jar的,server端没改过的话正常情况下是不会有问题的。

java中只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自 Serializable接口,实现Externalizable接口的类完全由自身来控制序列化的行为,而仅实现Serializable接口的类可以 采用默认的序列化方式 。

为了提高serialVersionUID的独立性和确定性,强烈建议在一个可序列化类中显示的定义serialVersionUID,为它赋予明确的值

常见序列化方法:

writeUTF(String s);将UTF-8字符串序列化/写入字节流
writeObject(Object obj);将java对象序列化/写入字节流

Serializable和 Externalizable的区别:

 Externalizable是Serializable的子类,使用Serializable会默认将整个对象都序列化,如果只想序列化一部分内容可以使用Serializable来制定:

此接口中定义了两个方法,这两个方法的作用如下。

writeExternal(ObjectOutputout):在此方法中指定要保存的属性信息,对象序列化时调用。

readExternal(ObjectInputin):在此方法中读取被保存的信息,对象反序列化时调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值