回答
不可能爲java中的對象分配一個字節數組並自動填充所有成員變量,但可以使用序列化從字節數組中獲取java對象。
您可以使用ObjectInputStream
和ObjectOutputStream
來獲取流入和流出對象。從一個字節數組中取出一個在ObjectInputStream
中包裝一個ByteArrayInputStream
。該對象必須實現Serializable
接口。這應該有助於避免手動解析字節數組。
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes));
MyObject o = (MyObject) in.readObject();
如果您正在讀取的數據不是序列化的java對象,您可以將方法添加到對象以幫助序列化。
從的javadoc在序列和反序列化過程中需要特殊處理應實現以下方法ObjectInputStream
序列化類:
private void writeObject(java.io.ObjectOutputStream stream) throws IOException;
private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException;
private void readObjectNoData() throws ObjectStreamException;
所以,你可以在數據讀取使用手動stream.read(...)在自定義的readObject方法中,並使用它在對象上設置成員變量。
這在內部做了相當數量的解析 - 它不會簡單地將這些字節的不安全的memcpy寫入對象所在的內存中,就像OP似乎需要的那樣。 – yshavit
我不確定表現。您還需要確保進入的數據是序列化的java對象。否則,您可以嘗試覆蓋readObject方法。我會爲你更新答案。 –
我的觀點是,OP似乎想要C的功能,「我有這個結構,我知道它佔用了內存中的這213個字節,我有這個213字節的數組 - 我只是將一個指針指向該數組的開始,au voila,我有一個我的結構實例。「 Java沒有這種功能,除了可能通過不安全的類 - tbh我從來沒有搞錯過它們。但是,序列化絕對不是。這當然可能是因爲我誤解了OP的需求,而且他們只是尋找簡單的序列化而無需編寫大量的代碼。 – yshavit
- 1. 將對象分配給對象Java
- 2. 將對象數組分配給DataGrid
- 3. 將對象分配給字符串
- 4. 將保留對象分配給弱屬性;對象將分配
- 5. Java:超類數組對象分配有子類數組對象
- 6. 將值分配給Java類實例對象中的字段
- 7. ActionScript - 將數據分配給數組對象後處置XML?
- 8. 將對象轉換爲字節數組
- 9. 過濾器對象並將屬性值分配給數組?
- 10. Express:將req.body對象中的數組分配給各個變量
- 11. 如何將變量分配給數組的對象?
- 12. 使用for循環將自定義對象分配給數組?
- 13. 將StringBuilder輸出分配給Java中的字符串數組
- 14. 如何將Groovy對象的所有匹配屬性分配給Java對象?
- 15. 對象數組的字節數組
- 16. 對象數組到字節數組
- 17. 角色對象數組字節數組
- 18. 無法將對象數組分配給Flow中的工會類型數組
- 19. jQuery將DOM元素分配給對象
- 20. 如何將值分配給JSON對象
- 21. 如何將「int」分配給對象?
- 22. OGNL/Struts2 JSP將bean分配給對象
- 23. 將ID分配給結構對象
- 24. 將JSON對象值分配給變量
- 25. 將分析數組分配給UITextView
- 26. python - 將字符串分配給字段對象
- 27. 字符串拆分並分配給Java中的數組
- 28. 將嵌套的產品/元組分配給數組[數字]
- 29. 將字節數組傳遞給函數
- 30. 如何將內存分配給java中的對象
否;你需要一個序列化系統。 – SLaks
'assign',你的意思是'讀入字節數組字段'? –