回答
不可能爲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. 將對象分配給對象Java
- 3. 將n維數組分配給對象
- 4. 將對象數組分配給DataGrid
- 5. 將值分配給2個數組和對象 - Java
- 6. 無法將現有的PictureBox對象分配給對象數組
- 7. 將簡單數組分配給對象數組?
- 8. 將對象分配給字符串
- 9. 將項目分配給對象字典
- 10. 如何將對象分配給字段
- 11. 將對象分配給button.tag
- 12. 將保留對象分配給弱屬性;對象將分配
- 13. Java:超類數組對象分配有子類數組對象
- 14. 將字符串數組分配給java中的組合框
- 15. 將值分配給Java類實例對象中的字段
- 16. 將值分配給Java中的對象字段?
- 17. Java:解析NumberFormat對象並將其分配給Number對象
- 18. 將Java對象數組返回給C++
- 19. ActionScript - 將數據分配給數組對象後處置XML?
- 20. 將ULONGLONG分配給16字節數組的結果是什麼?
- 21. 將文本字段分配給數組
- 22. 將對象轉換爲字節數組
- 23. 將字節數組轉換爲對象
- 24. 創建對象時需要將對象ID分配給字段
- 25. 使用for循環將自定義對象分配給數組?
- 26. 解析json對象並將其分配給數組
- 27. 如何將類對象值分配給可變數組?
- 28. Express:將req.body對象中的數組分配給各個變量
- 29. 如何將變量分配給數組的對象?
- 30. 過濾器對象並將屬性值分配給數組?
否;你需要一個序列化系統。 – SLaks
'assign',你的意思是'讀入字節數組字段'? –