关于Java Socket网络传输的序列化机制
采用Java Socket网络传输的`序列化机制,将对象“压扁”成二进制字节,将二进制字节在网络中传输;
自定义协议,将对象用字符串描述出来,将字符串用二进制表示,在网络中传输,在另外一边用相反的策略解析这个字符串,重新构造业务对象,这个方法能够在异构平台中进行传输而不变形,但是需要额外的编写“压扁”和“充气”的代码;
我们这里用第一种方法:
age ;
rt ArrayInputStream;
rt ArrayOutputStream;
rt ;
rt InputStream;
rt OutputStream;
rt ception;
rt tStream;
rt ctInputStream;
rt ctOutputStream;
rt utStream;
rt ;
ic class Persistence {
ic static void main(String[] args) {
[] bs = tes();
16.//在网络中进行传输
ytes(bs);
18.}
ic static byte[] toBytes() {
on p = new Person();
ame("corey");
all(171);
irthday(new Date());
ddress(new Address("yiyang", "ziyang"));
ArrayOutputStream out = new
ByteArrayOutputStream();
{
ctOutputStream oout = new ObjectOutputStream(out);
eObject(p);
29.} catch (IOException e) {
30.// TODO Auto-generated catch block
tStackTrace();
32.}
rn teArray();
34.}
ic static void getBytes(byte[] bs) {
{
ArrayInputStream byteIn = new
ByteArrayInputStream(bs);
ctInputStream in = new ObjectInputStream(byteIn);
on p = (Person) Object();
tln(ame());
tln(all());
tln(irthday());
tln(ddress()ity());
t(ddress()treet());
45.} catch (Exception e) {
46.// TODO Auto-generated catch block
tStackTrace();
48.}
49.}
50.}
其中服务端代码片段为:
= equestSocket()nputStream();
= equestSocket()utputStream();
[] bs = tes();
tln("发送数字长度:"+th);
e(bs);
equestSocket()e();
57.客户端代码片段为:
tStream in = nputStream();
[] bin = new byte[200];
length = 0;
e ((length = (bin)) != -1) {
tln("length:" + length);
ytes(bin);
64.}