从对象转换为字节数组并返回 Java

Mar*_*uzz 3 java serialization bytearray

我有两个类:TcpPacket 和 IpPacket。tcpPacket 应该存储在 ip 数据包的数据字段中。如何可靠地将 tcpPacket 对象转换为字节数组,以便将其存储在 IpPacket 的数据字段中?并且在另一端收到数据包后,如何可靠地将其转换回数据包对象?

public static final class TcpPacket {
    int source;
    int destination;

    public Packet( int source, int destination ) {
        this.source = source;
        this.destination = destination;
    }

    public String toString() {
        return "Source: " + source + ", Dest: " + destination;
    }
}

public static final class IpPacket {
    byte[] data;

    IpPacket( byte[] data ){
        this.data = data;
    }
}

TcpPacket tcpPacket = new TcpPacket( <someint>, <someint> );

// the following doesn't work because tcppacket is not a byte array.
IpPacket ipPacket = new IpPacket( tcpPacket );
Run Code Online (Sandbox Code Playgroud)

这通常是如何完成的?

谢谢 Maricruzz

BaN*_*aN3 7

这应该可以工作,只需在从序列化/反序列化函数接收对象后将其转换为您的类即可。

public static byte[] objToByte(TcpPacket tcpPacket) throws IOException {
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    ObjectOutputStream objStream = new ObjectOutputStream(byteStream);
    objStream.writeObject(tcpPacket);

    return byteStream.toByteArray();
}

public static Object byteToObj(byte[] bytes) throws IOException, ClassNotFoundException {
    ByteArrayInputStream byteStream = new ByteArrayInputStream(bytes);
    ObjectInputStream objStream = new ObjectInputStream(byteStream);

    return objStream.readObject();
}
Run Code Online (Sandbox Code Playgroud)