いくつかの変数を持つ 2 つのクラス オブジェクトを含むクラスがあります。送信機能を使用してクラスのインスタンスをUSB経由で送信したい(そして反対側で受信したい)。send 関数は、バイト配列 (byte[]) を受け入れます。
私の質問は、クラスのインスタンスをバイト配列に変換して送信できるようにするにはどうすればよいですか? そして、反対側でそれを適切に再構築するにはどうすればよいですか?
以下は、送受信したい te クラス 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();
}
私の質問は、これが良い解決策であるかどうかです。