2011-01-26 2 views

答えて

6

いいえ、代わりにserializationを使用できます。

+0

リンクが壊れました。 – Hubbitus

+1

ありがとう@Hubbitus。私はシリアライゼーションについても説明する別のリンクに変更しました。 – vitaut

4

Javaには任意のバイトブロックを持ち、コンパイラに "これをX型のオブジェクトとして扱う必要があります"と言う方法はありません。

最初に作成した「オブジェクトに復元する」バイトはどのようにして作成されましたか?

Javaには、オブジェクトをバイトストリームに変換するためのシリアル化メカニズムがあり、その逆もあります。

3

私はあなたがここで何を求めているのか正確には分かりませんが、Javaの各オブジェクト(これには配列も含まれます)には実行時の型情報が関連付けられています。したがって、オブジェクトを別の型にキャストすると、新しい型が一致しない場合はすぐに例外がスローされます。これはC/C++とは非常に異なります.C/C++では、メモリのブロックを必要なオブジェクトとして扱うようにコンパイラに指示することができます。

任意のバイトセットをオブジェクトに変換するコードを探している場合、またはその逆に変換するコードを探している場合は、組み込みの直列化機能を使用するか、独自の変換を使用して別の方法で行う必要がありますコード。

0

ここにあなたが望むものを達成するための方法があります。

public static Object toObjectFromByteArray(byte[] byteArr) { 
     if (byteArr == null) { 
      return null; 
     } 

     Object resultObj = null; 
     ByteArrayInputStream bin = null; 
     ObjectInputStream ooin = null; 
     try { 
      bin = new ByteArrayInputStream(byteArr); 
      ooin = new ObjectInputStream(bin); 
      resultObj = ooin.readObject(); 
     } 
     catch (Exception ex) { 
      throw new RuntimeException(ex); 
     } 
     finally { 
      try { 
       if (ooin != null) { 
        ooin.close(); 
       } 
       if (bin != null) { 
        bin.close(); 
       } 
      } 
      catch (IOException ex1) { 
       ex1.printStackTrace(); 
      } 

     } 
     return resultObj; 
    } 

    public static byte[] toByteArray(Object obj) { 
     ByteArrayOutputStream barr = null; 
     ObjectOutputStream oout = null; 
     byte[] bytearr = null; 
     try { 
      byte[] b2 = null; 
      barr = new ByteArrayOutputStream(10000); 
      oout = new ObjectOutputStream(barr); 
      oout.writeObject(obj); 
      oout.flush(); 
      oout.close(); 
      bytearr = barr.toByteArray(); 

     } 
     catch (Exception ex) { 
      throw new RuntimeException(ex); 
     } 
     finally { 
      try { 
       if (oout != null) { 
        oout.close(); 
       } 
       if (barr != null) { 
        barr.close(); 
       } 
      } 
      catch (IOException ex1) { 
       ex1.printStackTrace(); 
      } 
     } 
     return bytearr; 
    } 
関連する問題