回答
根本的問題是,「如何序列化/在 語言無關的方式?反序列化對象」具體Java和C,你的情況。由於您要通過網絡發送此數據,所以請注意network order/endianness問題也很重要。
我假設你可以訪問客戶端和服務器。這意味着你需要 來選擇如何序列化數據。 (如果沒有,答案很簡單,寫 以對方的期望爲準)
就個人而言,我會用Protocol Buffers。 有Java bindings 和C bindings。
如果你不喜歡Protocol Buffers的,還有其他選項,如:
是的,我有權訪問這兩者。 這是哪個更好的解決方案(最快)? – user655561 2012-04-19 03:20:34
除非將原始內存丟棄到網絡中,否則無需擔心排列順序。請參閱Rob Pike在http://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html上的精彩討論(如果名字不熟悉,Pike是Unix的發明者之一。) – 2012-04-19 21:54:10
將Java對象的字段寫入字符串(可能爲JSON),通過TCP發送它們,讓C程序讀取字符串並使用它在另一端初始化新的C變量。
我已經想過這個解決方案。但我堅持從java發送字符串到C,我成功發送的唯一東西是Char。我雖然約: 1發送一個整數,表示字符串的長度。 2 - 做動態分配 2 - 按字符發送字符串 我相信這個解決方案速度慢,性能不高的問題。 那你覺得呢? – user655561 2012-04-19 14:45:32
爲了提高性能,您希望儘可能多地在一個數據包中發送儘可能多的數據,但這完全取決於您如何表示數據。例如,您可以將數字160作爲一個二進制'A0'字節發送,或者可以將它作爲3個字符'1','6','0'發送,或者您可以發明一些其他表示。唯一重要的是發送者和接收者對錶示達成一致。而且你可以保證,因爲你可以控制兩端。 @Pablo Maurin建議使用協議緩衝區是非常合理的。 – 2012-04-19 21:50:53
這個問題很舊,但爲防萬一有人仍在尋找一個好的解決方案,您可以嘗試使用協議緩衝區實現,正如@Adam Liss先前回答中所述:(developers.google。 COM /協議緩衝器/)
總之,可以定義任何複雜的消息類型爲在協議實現,該工具產生C++ /爪哇/ Python代碼可序列化和反序列化。
出於同樣的目的,使用C代碼,德國慕尼黑工業大學(TUM)的一個研究項目已經創建了一個標準C的代碼生成器,可用於嵌入式C項目。這與Google的protobuf實現完全兼容(由於C結構的限制)。這比C Bindings更好,因爲它不需要鏈接任何庫。 我在獲得C Bindings在我正在使用的嵌入式系統上工作時遇到問題,因爲它需要與支持庫鏈接。
這救了我的(痛苦)的一天,我的嵌入式項目 - 嵌入式系統和Android應用程序(JAVA)/桌面應用(C++/QT)之間傳遞複雜的網絡數據(請求 - 響應)。
- 1. 通過TCP從C#客戶端發送對象(類)到Java服務器
- 2. 從服務器發送JSON對象到客戶端JAVA
- 3. 將消息從C++服務器發送到java客戶端
- 4. 如何將複雜類型從客戶端發送到服務器端
- 5. C#客戶端。從C#客戶端發送數據到Java服務器
- 6. 通過服務器發送BufferedImage到另一個Java客戶端
- 7. 通過從php客戶端發送對象到SOAPnet SOAP服務器消費SOAP
- 8. 將圖像從C#客戶端發送到C服務器
- 9. 從客戶端發送到服務器,從服務器發送到客戶端在java中
- 10. 如何使用Java將對象從客戶端發送到服務器?
- 11. Java客戶端/服務器不通過Socket/ServerSocket進行通信
- 12. 從服務器發送到客戶端
- 13. 從C客戶端發送一個整數到Java服務器
- 14. 發送從C客戶端到Java服務器的字符串
- 15. 通過http post發送數據從客戶端到服務器
- 16. 我無法從服務器發送對象到客戶端
- 17. 從客戶端發送一個對象到服務器
- 18. 從客戶端發送序列化對象到服務器
- 19. Java客戶端/服務器通過套接字發送對象問題
- 20. 將複雜對象數組從客戶端傳遞到服務器WITHOUT AJAX
- 21. 通過zmq用C++客戶端發送JSON對象 - Python服務器
- 22. 通過客戶端從服務器發送到服務器的敏感數據
- 23. 使用JSON將服務器(PHP)中的對象發送到客戶端(Java)
- 24. 發送float數組從C++服務器到C#客戶端
- 25. Socket問題c#客戶端到java服務器
- 26. 通過web服務從服務器發送文件到客戶端
- 27. 通過網絡服務從服務器發送PDF文件到客戶端
- 28. 無法發送(服務)對象從RMI服務器到客戶端
- 29. 我可以通過ASP.NET將對象從客戶端JavaScript發送到服務器端代碼嗎?
- 30. 通過javascript發送JSON數據從客戶端到服務器通過javascript
你期望一個** c **服務器如何處理java對象的內部表示? – Voo 2012-04-18 22:23:33
你在寫客戶端嗎?服務器?都? – 2012-04-18 22:59:30
@PabloMaurin我寫這兩個。 – user655561 2012-04-19 03:17:05