DatagramPacket的传送参数是byte[]类型,我想传自己定义的对象,怎样把对象赋给byte[]类型?谢谢!

解决方案 »

  1.   

    使用ByteArrayOutputStream和ObjectOutputStream就可以实现要求。
    具体参考代码:
    /*
     * ObjectStream.java
     *
     * Created on 2007年11月12日, 下午1:08
     *
     * You can read and modify it but must make it run successfully
     */package org.tiger.io;import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;/**
     *
     * @author pgj
     */
    public class ObjectStream {
        
        /** Creates a new instance of ObjectStream */
        public ObjectStream() {
        }
        public static void main(String[] args) throws IOException {
            Person p = new Person("Pgj",14);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(p);
            oos.flush();
            
            //write
            byte[] b = bos.toByteArray();
            DatagramPacket packet = new DatagramPacket(b,b.length,InetAddress.getByName("127.0.0.1"),8888);
            DatagramSocket socket = new DatagramSocket();
            socket.send(packet);
            socket.close();
        }
        
    }
    /*
     * Person.java
     *
     * Created on 2007年11月12日, 下午1:32
     *
     * You can read and modify it but must make it run successfully
     */package org.tiger.io;import java.io.Serializable;/**
     *
     * @author pgj
     */
    public class Person implements Serializable{
        private String name;
        private int age;
        
        public Person(String name,int age){
            this.name = name;
            this.age = age;
        }
        
        public String toString(){
            return "name:" + name + ";age:" + age;
        }
    }
      

  2.   

    还有个测试代码:
    /*
     * ReciveStream.java
     *
     * Created on 2007年11月12日, 下午1:31
     *
     * You can read and modify it but must make it run successfully
     */package org.tiger.io;import java.io.ByteArrayInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;/**
     *
     * @author pgj
     */
    public class ReciveStream {
        
        /** Creates a new instance of ReciveStream */
        public ReciveStream() {
        }
        public static void main(String[] args) throws SocketException, IOException, ClassNotFoundException {
            DatagramSocket socket = new DatagramSocket(8888);
            byte[] buffer = new byte[4089];
            DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
            socket.receive(packet);
            
            //read
            ByteArrayInputStream bis = new ByteArrayInputStream(packet.getData(),packet.getOffset(),packet.getLength());
            ObjectInputStream ois = new ObjectInputStream(bis);
            Person p = (Person) ois.readObject();
            System.out.println("Person:" + p);        
            
        }
        
    }