Java内置的序列化方式

网络数据传输的是一个二进制的字节数组。把对象序列化为二进制字节数组和把二进制字节数组反序列化为对象的时间加起来,时间越少,性能越高。使用JSON 和XML的居多!

先看看String类的源码

public final class String implements
java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];

/** Cache the hash code for the string */
private int hash; // Default to 0

/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = -6849794470754667710L;
//....................
}

Java的内置序列化方式

可以看出String实现了Java的内置序列化接口Serializable,于是接下来利用String类演示一下Java的内置序列化是怎样做到的:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Demo {
public static void main(String[] args)
throws IOException, ClassNotFoundException {

String str = new String("Hello");

// 定义一个字节数组输出流
ByteArrayOutputStream os = new ByteArrayOutputStream();

// 对象输出流
ObjectOutputStream out = new ObjectOutputStream(os);

// 将对象写入到字节数组输出,进行序列化
out.writeObject(str);
byte[] strByte = os.toByteArray();

// 字节数组输入流
ByteArrayInputStream is = new ByteArrayInputStream(strByte);

// 执行反序列化,从流中读取对象
ObjectInputStream in = new ObjectInputStream(is);

String str2 = (String) in.readObject();
System.out.println(str2);
}
}

mark

使用Hessian进行序列化

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import com.caucho.hessian.io.HessianInput;
import com.caucho.hessian.io.HessianOutput;

public class Demo {
public static void main(String[] args)
throws IOException {
String str = new String("Hello");

// 定义一个字节数组输出流
ByteArrayOutputStream os = new ByteArrayOutputStream();

//Hessian的序列化输出
HessianOutput ho = new HessianOutput(os);

ho.writeObject(str);

byte[] strByte = os.toByteArray();

ByteArrayInputStream is = new ByteArrayInputStream(strByte);

//Hessioan的反序列化读取对象
HessianInput hi = new HessianInput(is);

String str2 = (String)hi.readObject();
System.out.println(str2);
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值