2011-01-26 7 views

답변

6

아니요, 대신 serialization을 사용할 수 있습니다.

+0

지금 연결이 끊어졌습니다. – Hubbitus

+1

고마워요 @Hubbitus. 직렬화에 대해 설명하는 다른 링크로 변경했습니다. – vitaut

4

Java에서 임의의 바이트 블록을 가지고 컴파일러에게 "이 코드를 X 유형의 객체로 처리해야합니다"라고 말하는 방법은 없습니다.

처음에 만든 "개체로 복원"할 바이트는 어떻게 되었습니까?

Java는 객체를 바이트 스트림으로 변환하거나 그 반대로 변환합니다.

3

나는 당신이 여기서 무엇을 묻고 있는지 정확히 모르겠지만 Java의 각 객체 (배열을 포함)에는 런타임 유형 정보가 연관되어 있습니다. 따라서 객체를 다른 유형으로 캐스팅하면 새로운 유형이 일치하지 않으면 예외가 즉시 발생합니다. 이것은 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; 
    } 
관련 문제