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

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

采用Java 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. }  

其中服务端代码片段为:

 
 
  1. in = this.getRequestSocket().getInputStream();  
  2. out = this.getRequestSocket().getOutputStream();  
  3. byte[] bs = Persistence.toBytes();  
  4. System.out.println("发送数字长度:"+bs.length);  
  5. out.write(bs);  
  6. this.getRequestSocket().close();  
  7. 客户端代码片段为:  
  8. InputStream in = request.getInputStream();  
  9. byte[] bin = new byte[200];  
  10. int length = 0;  
  11. while ((length = in.read(bin)) != -1) {  
  12. System.out.println("length:" + length);  
  13. Persistence.getBytes(bin);  

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值