是否可以直接将字节arra(通过tcp套接字接收)分配给Java Object而不解析数据?
在c中,可以直接将字节分配给结构,这在java中可能吗?
答案 0 :(得分:2)
无法在java中为对象分配字节数组并自动填充所有成员变量,但可以使用序列化从字节数组中获取java对象。
您可以使用ObjectInputStream
和ObjectOutputStream
将对象输入和输出流。要从一个字节数组中获取一个ByteArrayInputStream
中的ObjectInputStream
。该对象必须实现Serializable
接口。这可以帮助您避免手动解析字节数组。
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
MyObject o = (MyObject) in.readObject();
如果您正在读取非序列化java对象的数据,则可以向对象添加方法以帮助进行序列化。
的javadoc在序列化和反序列化过程中需要特殊处理的可序列化类应实现以下方法:
private void writeObject(java.io.ObjectOutputStream stream) throws IOException;
private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException;
private void readObjectNoData() throws ObjectStreamException;
因此,您可以在自定义readObject方法中使用stream.read(...)手动读取数据,并使用它在对象上设置成员变量。