Tôi là lập trình viên C++ và có nhu cầu thiết lập một số liên lạc UDP giữa ứng dụng android java và máy chủ C++ chạy trên PC.Gửi cấu trúc C++ qua UDP trong Java
Tôi có cấu trúc mà tôi cần phải nhận được trên PC mà bao gồm các nội dung sau:
int
int
float
Đáng tiếc là tôi hoàn toàn tại một mất mát như thế nào tôi có thể làm điều này với Java.
Tôi cần tạo DatagramPacket nhưng hàm tạo chỉ mất một mảng byte. Bây giờ với C++ này sẽ là một diễn viên dễ dàng từ một cấu trúc để một char *. Tuy nhiên đúc như thế này là không thể với Java.
Tôi đã tạo một lớp đơn giản có các trường ở trên trong đó. Điều đó có vẻ ổn. Vấn đề còn lại của tôi là làm thế nào để biến nó thành một mảng byte. Bất cứ ai có thể giúp một Java noob trên mặt trận này?
Chúc mừng!
Edit: Tôi đã tạo một hàm trong lớp nào sau đây
public byte[] GetBytes() throws IOException
{
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
DataOutputStream dataOut = new DataOutputStream(byteOut);
dataOut.writeInt(Integer.reverseBytes(int1));
dataOut.writeInt(Integer.reverseBytes(int2));
dataOut.writeFloat(float1);
return byteOut.toByteArray();
}
Có cách nào tốt hơn để làm điều này?
Tôi không muốn sử dụng bộ đệm giao thức google được đề cập trong câu trả lời của Steve bởi vì, trong khi thú vị của nó, nó sẽ đòi hỏi quá nhiều thay đổi để triển khai nền tảng khác mà tôi thực sự không muốn làm.
Tôi thông cảm với ý tưởng rằng 'protobuf' là búa tạ để bẻ khóa hạt trong trường hợp này. Tuy nhiên, các yêu cầu này có một cách mở rộng mặc dù - bạn có thể thấy 'protobuf' là chính đáng, nếu tập dữ liệu bạn phải xử lý dự kiến sẽ tăng lên. –