Java Socket网络传输的序列化机制

Java Socket网络传输如何才能更好的完成自己的任务?下面我们就来看看有关的代码介绍,希望大家有所收获。在网络中的两台机器中传输对象,前提首先是基于同一个平台,这是序列化的基础,所以这里主要有两种做法:


  采用Java <http://developer.51cto.com/art/200512/15883.htm> Socket网络传输的序列化机制,将对象“压扁”成二进制字节,将二进制字节在网络中传输;


  自定义协议,将对象用字符串描述出来,将字符串用二进制表示,在网络中传输,在另外一边用相反的策略解析这个字符串,重新构造业务对象,这个方法能够在异构平台中进行传输而不变形,但是需要额外的编写“压扁”和“充气”的代码;


  我们这里用第一种方法:


  1.package stream.demo;


  2.import java.io.ByteArrayInputStream;


  3.import java.io.ByteArrayOutputStream;


  4.import java.io.File;


  5.import java.io.FileInputStream;


  6.import java.io.FileOutputStream;


  7.import java.io.IOException;


  8.import java.io.InputStream;


  9.import java.io.ObjectInputStream;


  10.import java.io.ObjectOutputStream;


  11.import java.io.OutputStream;


  12.import java.util.Date;


  13.public class Persistence {


  14.public static void main(String[] args) {


  15.byte[] bs = Persistence.toBytes();


  16.//在网络中进行传输


  17.Persistence.getBytes(bs);


  18.}


  19.public static byte[] toBytes() {


  20.Person p = new Person();


  21.p.setName("corey");


  22.p.setTall(171);


  23.p.setBirthday(new Date());


  24.p.setAddress(new Address("yiyang", "ziyang"));


  25.ByteArrayOutputStream out = new


  ByteArrayOutputStream();


  26.try {


  27.ObjectOutputStream oout = new ObjectOutputStream(out); 
   
    28.oout.writeObject(p);


  29.} catch (IOException e) {


  30.// TODO Auto-generated catch block


  31.e.printStackTrace();


  32.}


  33.return out.toByteArray();


  34.}


  35.public static void getBytes(byte[] bs) {


  36.try {


  37.ByteArrayInputStream byteIn = new


  ByteArrayInputStream(bs);


  38.ObjectInputStream in = new ObjectInputStream(byteIn);


  39.Person p = (Person) in.readObject();


  40.System.out.println(p.getName());


  41.System.out.println(p.getTall());


  42.System.out.println(p.getBirthday());


  43.System.out.println(p.getAddress().getCity());


  44.System.out.print(p.getAddress().getStreet());


  45.} catch (Exception e) {


  46.// TODO Auto-generated catch block


  47.e.printStackTrace();


  48.}


  49.}


  50.}


  其中服务端代码片段为:


  51.in = this.getRequestSocket().getInputStream();


  52.out = this.getRequestSocket().getOutputStream();


  53.byte[] bs = Persistence.toBytes();


  54.System.out.println("发送数字长度:"+bs.length);


  55.out.write(bs);


  56.this.getRequestSocket().close();


  57.客户端代码片段为:


  58.InputStream in = request.getInputStream();


  59.byte[] bin = new byte[200];


  60.int length = 0;


  61.while ((length = in.read(bin)) != -1) {


  62.System.out.println("length:" + length);


  63.Persistence.getBytes(bin);


  64.}


  以上就是对Java Socket网络传输的详细介绍,希望大家有所帮助。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值