我必須編寫一個Java程序,它將接收來自網絡的消息並將其內容顯示給用戶。問題是我收到的消息只是C結構的二進制轉儲。除此之外,一些消息來自小端機器,一些來自大端機器,而沒有將字段轉換爲網絡字節順序。 我有一種方法是使用JNI並將c結構轉換爲某個XML字符串,然後將此XML字符串序列化爲Java對象。這是一項艱鉅的工作,因爲有大約122個不同的結構,每個結構都包含20多個字段。 我想知道是否有一個圖書館/工具/方法可以使我的工作輕鬆一點?在Java中使用C結構
12
A
回答
4
Swig將處理很多繁瑣的重複性工作,將C結構映射到Java對象。查看Swig/Java manual和wrapping C structures的條目。
+0
謝謝布賴恩,我想瑞奇肯定會幫助 – Rohin 2009-08-17 14:23:58
4
您可以使用DataInputStream
加載來自任何InputStream
的數據。只要你知道結構的確切佈局,這應該就足夠了。
5
1
java.nio具有ByteBuffer,它在讀寫時支持翻轉字節順序,如果需要的話可以在飛行中進行。
8
有一個名爲Preon的圖書館,旨在幫助你完成這種類型的任務:Preon site基本上,他們試圖保留從二進制流中讀取POJO中所有字段的註釋的所有邏輯。
從自己的文件,你控制你正在閱讀的int的長度的例子:
class Rectangle
{
@BoundNumber(size="16") private int x1;
@BoundNumber(size="16") private int y1;
@BoundNumber(size="16") private int x2;
@BoundNumber(size="16") private int y2;
}
或指定字節序:
class Rectangle
{
@BoundNumber(byteOrder=LittleEndian) private int x1;
@BoundNumber(byteOrder=LittleEndian) private int y1;
@BoundNumber(byteOrder=LittleEndian) private int x2;
@BoundNumber(byteOrder=LittleEndian) private int y2;
}
你甚至可以使用微型方程來引用在以前的字段中指定大小/長度等的值。
@BoundList(size="width * height") byte[] pixels;
@BoundNumber(size="nrBits * 2") int value;
哦,他們a也提供條件邏輯,全部在註釋中。
相關問題
- 1. 在Java中使用的數據結構
- 2. C#使用結構
- 3. 在c中使用數組的結構#
- 4. 如何在C中使用結構?
- 5. 在C++中使用Matlab數據結構?
- 6. 在C#中限制使用結構
- 7. 在頭文件中使用結構C++
- 8. Typedef結構在c中的使用
- 9. 在結構中使用Shmget()in c
- 10. 在其他結構中使用結構。 C
- 11. 在另一個結構中使用一個結構c
- 12. 如何在結構中使用結構?
- 13. 用途結構,typedef結構,在C++的
- 14. 結構在C++中的結構
- 15. jni從java結構到C
- 16. JNA C結構到Java
- 17. SWIG C++結構到java
- 18. 如何僅使用結構中的幾個結構成員在c中創建新的結構結構?
- 19. C結構使用循環
- 20. 使用結構錯誤,C
- 21. 在C#程序中使用C/C++數據結構
- 22. 如何使用Swing在Java中構建我的圖形結構?
- 23. 以任何順序在結構內部使用結構(C)
- 24. 結構在C#
- 25. C,在結構
- 26. 在C中定義一個結構中的結構陣列C
- 27. 如何使用f#中的c#結構#
- 28. 使用extern結構中的C
- 29. 使用結構數組在C#
- 30. C++與結構使用.find()在地圖
你有沒有機會使用CAN網絡?如果是這樣,解析DBC文件將是最好的解決方案。 – gramm 2009-08-17 13:28:59
不幸的是它是一個properiatrory電信系統。我正在編寫一個調試工具,用於繪製系統內部模塊之間交換的消息。一種呼叫流程圖。 – Rohin 2009-08-17 13:36:33