2014-06-16 14 views
2

讓我有一個簡單的類直接轉換成Java類字段字節數組

public class A 
{ 
    public int a; 
    public int b; 
    public byte c; 
    public byte d; 
    public B e; 
    public C f; 
    public byte[] g = new byte[5]; 
} 

有沒有辦法把它轉換成一個字節數組,而不用手做什麼呢?需要結果數組中相同的字段順序,並且不允許字節數組中的其他信息,只是字段值。

+0

我猜想反射,但首先:你爲什麼要這樣做? – awksp

+0

如果你想使用一個類作爲一個結構,那麼這很困難。您可以使用反射來獲取字段,但沒有訂單保證。 – McDowell

+0

你確定,你只是不需要序列化它?數組的用途是什麼,你會創建?如果它只是序列化/反序列化使用標準的ObjectOutputStream/ObjectInputStreams – mavarazy

回答

0

如果你喜歡使用反射,你不能保證檢索字段的順序。

所以你可以使用兩種方法:

  • 訂購lexycally領域
  • 與場的順序添加註釋到每個字段的系列化

注意,對於數組序列化你必須知道數組的長度或使用分隔符來表示數組的結尾。在你的例子的簡單情況下,這是不需要的,因爲你只有一個數組。如果你有多個可變長度變量(例如一個字符串或一個數組)就變得有必要。

如果您需要在您的代碼和外部代碼之間共享這些數據,您必須確保您的序列化過程等於外部程序的序列化過程。這意味着知道例如int是否被表示爲BigEndian或不。