a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 140|回复: 1

[其他] JAVA技巧:JavaSocket网络传输的序列化基础方法

[复制链接]
发表于 2012-8-4 12:28:23 | 显示全部楼层 |阅读模式
Java Socket网络传输如何才能更好的完成自己的任务?下面我们就来看看有关的代码介绍,希望大家有所收获。在网络中的两台机器中传输对象,前提首先是基于同一个平台,这是序列化的基础,所以这里主要有两种做法:
# V- c* w6 q7 q7 M# V  采用Java  Socket网络传输的序列化机制,将对象“压扁”成二进制字节,将二进制字节在网络中传输;1 N" D8 h+ j% m& E) k
  自定义协议,将对象用字符串描述出来,将字符串用二进制表示,在网络中传输,在另外一边用相反的策略解析这个字符串,重新构造业务对象,这个方法能够在异构平台中进行传输而不变形,但是需要额外的编写“压扁”和“充气”的代码;; \! |1 a. s" m8 y3 H- U
  我们这里用第一种方法:! s$ N; [2 \1 i6 c3 \
  1.package stream.demo;
$ d  h6 Q5 [) G  h- A4 {; m* q* [  2.import java.io.ByteArrayInputStream;! x5 @3 r5 \! E' A* w* S( o# g
  3.import java.io.ByteArrayOutputStream;
& `* K2 U8 J+ ^7 A8 x! t, ?# E  4.import java.io.File;
' s, v; g" {2 O. N/ _  5.import java.io.FileInputStream;
- t4 ?) a7 y/ x' G/ c  r  6.import java.io.FileOutputStream;
% U: {. R9 z: N: b4 b% x  N  7.import java.io.IOException;
9 i- J7 C/ Y# Y6 T* ]( M' c" O  8.import java.io.InputStream;
4 x, e" N1 }0 S  9.import java.io.ObjectInputStream;) }4 g  r: l* E. {" M# C
  10.import java.io.ObjectOutputStream;
' H. b: e3 T4 ^" z& t  11.import java.io.OutputStream;* N$ l$ ?/ ~/ _& \+ u5 l
  12.import java.util.Date;
) v$ F) A- d( g' l$ _  13.public class Persistence {4 v. B: O9 @* ^7 Z& U0 y
  14.public static void main(String[] args) {
! N- {: [3 M9 r, w  15.byte[] bs = Persistence.toBytes();, l6 Z1 a9 p# I7 Y( t% W* P
  16.//在网络中进行传输/ Q6 P( Z% \% u- [, s' {4 p# _
  17.Persistence.getBytes(bs);
% n% U. t  ?. r  h& i. X* w6 y4 ^0 }$ L9 Z9 g' M
  18.}
回复

使用道具 举报

 楼主| 发表于 2012-8-4 12:28:24 | 显示全部楼层

JAVA技巧:JavaSocket网络传输的序列化基础方法

</p>  19.public static byte[] toBytes() {
5 a" e3 C/ c5 }  20.Person p = new Person();; u. }% e8 _$ |: y5 l$ T2 J$ q/ f- y
  21.p.setName("corey");! W7 c% Q4 @# x- v- P0 F
  22.p.setTall(171);+ T5 @( W8 V# G" U
  23.p.setBirthday(new Date());
% v# c7 l9 T/ x+ \0 N, {0 f  24.p.setAddress(new Address("yiyang", "ziyang"));$ w* Y5 m8 }9 V& b
  25.ByteArrayOutputStream out = new' \0 k/ p) x+ X/ W: k
  ByteArrayOutputStream();
& y8 Y8 F& N9 D2 L* ^% C5 x  26.try {/ N. w1 n. O6 W9 q( J
  27.ObjectOutputStream oout = new ObjectOutputStream(out);/ I; a& d  g6 }9 s
  28.oout.writeObject(p);
3 a7 ?9 d5 @9 c  29.} catch (IOException e) {4 ]# B  b4 I# L  R& D& m1 S4 U
  30.// TODO Auto-generated catch block. l( F! k) l$ h2 x1 a, F5 l; r
  31.e.printStackTrace();0 I- m* U( m5 p0 y. k# O
  32.}
7 Y  C& r9 ^9 A; h7 p  t  33.return out.toByteArray();1 k! o  f9 ~( @' U' f! ?+ t
  34.}
7 w9 }  N6 O" ~
; P; c$ c1 M: I4 u 9 {! j3 \2 G, x7 w# i2 v6 E
 35.public static void getBytes(byte[] bs) {  Z& ^, J; j% L
  36.try {
5 c" X; o7 j) d  H* z5 o  37.ByteArrayInputStream byteIn = new- l9 X9 q: J, d) Y
  ByteArrayInputStream(bs);3 r2 I2 z1 t7 N
  38.ObjectInputStream in = new ObjectInputStream(byteIn);
* a" }5 C5 r# ~) W6 b% A  39.Person p = (Person) in.readObject();1 Z5 s# q/ y" \9 o
  40.System.out.println(p.getName());
% Q: F5 G  h* m& A  41.System.out.println(p.getTall());! [( w9 D2 U0 j
  42.System.out.println(p.getBirthday());- N, p0 n9 M8 }# x( r
  43.System.out.println(p.getAddress().getCity());) d: Q/ l% D: o5 W
  44.System.out.print(p.getAddress().getStreet());$ ~' D( A1 e" G: X6 E7 T, ?
  45.} catch (Exception e) {
9 N. }; }  y* v2 d- c2 ?$ f# A" g  46.// TODO Auto-generated catch block- {: x5 M. Y) U; N/ Z& V, Z
  47.e.printStackTrace();7 V; m6 ?8 I$ L+ C- h; L# h
  48.}
* G" y4 Z4 Z0 b( |8 }0 x: N  49.}6 s. d2 X- ^+ N1 o3 d" b& Z! ^: }( h
  50.}: y: O* m9 N1 {) @7 O" m
  其中服务端代码片段为:
' v" n. h2 Y* Y' h7 X  51.in = this.getRequestSocket().getInputStream();
! o; {3 D4 I/ O. S/ X' w  52.out = this.getRequestSocket().getOutputStream();
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 07:54 , Processed in 0.177620 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表