gpt4 book ai didi

java - 将类对象转换为字节缓冲区

转载 作者:行者123 更新时间:2023-11-29 07:06:03 25 4
gpt4 key购买 nike

我有一个包含两个带有一些变量的类对象的类。我想通过带有发送功能的 USB 发送该类的实例(并在另一端接收)。发送函数接受字节数组 (byte[])。

我的问题是如何将类的实例转换为字节数组以便发送它?我如何在另一边正确地重建它?

下面是我要发送和接收的类 Comsstruct。欢迎提出任何建议!

     // ObjectInfo struct definition
public class ObjectInfo {
int ObjectXCor;
int ObjectYCor;
int ObjectMass;
};

// ObjectInfo struct definition
public class SensorDataStruct{
int PingData;
int IRData;
int ForceData;
int CompassData;
};

// ObjectInfo struct definition
public class CommStruct{
public ObjectInfo VisionData;
public SensorDataStruct SensorData;
};

public CommStruct SendPacket;
public CommStruct RecievePacket;

更新

我找到了一个解决方案,但根据我得到的建议,我想知道这是否可行(以及它是否是一个好的解决方案)?

有一个serialsation方法和一个send方法:

// Method to convert object to a byte array
public static byte[] serializeObject(CommStruct obj) throws IOException
{
ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bytesOut);
oos.writeObject(obj);
oos.flush();
byte[] bytes = bytesOut.toByteArray();
bytesOut.close();
oos.close();
return bytes;
}

// Send struct function
public void Send(){

try
{
// First convert the CommStruct to a byte array
// Then send the byte array
server.send(serializeObject(SendPacket));

}
catch (IOException e)
{
Log.e("microbridge", "problem sending TCP message", e);
}

还有一个接收处理函数:

    public void onReceive(com.example.communicationmodulebase.Client client, byte[] data)
{

// Event handler for recieving data


// Try to receive CommStruct
try
{
ByteArrayInputStream bytesIn = new ByteArrayInputStream(data);
ObjectInputStream ois = new ObjectInputStream(bytesIn);
RecievePacket = (CommStruct) ois.readObject();
ois.close();
}
catch (IOException e)
{
Log.e("microbridge", "problem recieving TCP message", e);
}
catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("microbridge", "problem recieving TCP message", e);
}

// Send the recieved data packet back
SendPacket = RecievePacket;

// Send CommStruct
Send();
}

我的问题是这是否是一个好的解决方案?

最佳答案

您可以让您的类实现 Serializable interface ,然后通过字节流发送。但这是一个非常糟糕的主意,很可能行不通。

为什么这行不通或不能保证行得通的原因是不能保证不同的 java 实现将使用相同的序列化机制,因此 bytearray 在不同的 Java implementations 中很可能不同。 .

相反,我建议您将对象转换为某种中间格式,如 xml 或 json,然后发送。这样接收器甚至不必用 java 编码。

关于java - 将类对象转换为字节缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19643386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com