제 함수 메시지 배열에 바이트 및 객체 유형이 들어있어 바이트에서 객체를 복원해야합니다. Java에서 C++와 같은 캐스트가 있습니까?Java에서 <reinterpret_cast>와 비슷한 C++로 캐스팅 되었습니까?
답변
아니요, 대신 serialization을 사용할 수 있습니다.
아니요, 개체를 serialize해야합니다. http://java.sun.com/developer/technicalArticles/Programming/serialization/
개체 데이터가 다른 언어로 읽을 수 있어야하는 경우 유용하지 않을 수 있습니다.
지금 깨진 링크. – Hubbitus
Java에서 임의의 바이트 블록을 가지고 컴파일러에게 "이 코드를 X 유형의 객체로 처리해야합니다"라고 말하는 방법은 없습니다.
처음에 만든 "개체로 복원"할 바이트는 어떻게 되었습니까?
Java는 객체를 바이트 스트림으로 변환하거나 그 반대로 변환합니다.
나는 당신이 여기서 무엇을 묻고 있는지 정확히 모르겠지만 Java의 각 객체 (배열을 포함)에는 런타임 유형 정보가 연관되어 있습니다. 따라서 객체를 다른 유형으로 캐스팅하면 새로운 유형이 일치하지 않으면 예외가 즉시 발생합니다. 이것은 C/C++과 매우 다른데, 컴파일러에게 메모리 블록을 원하는 객체로 취급하도록 알릴 수 있습니다.
임의의 바이트 세트를 객체로 변환하거나 그 반대로 변환하는 코드를 찾으려면 내장 직렬화 기능을 사용하거나 고유 한 변환을 사용하여 다른 방식으로 변환해야합니다 암호.
여기에 원하는 것을 성취 할 수있는 방법이 있습니다.
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;
}
- 1. C로 오버로딩 되었습니까?
- 2. C에서 비슷한 유형의 캐스팅 #
- 3. Java에서 인용 부호 (@ "")와 비슷한 C#을 사용하는 방법이 있습니까
- 4. Java에서 안정적인 멀티 캐스팅
- 5. Java에서 getBytes()와 C#
- 6. Java에서 JPanel과 비슷한 위젯이 있습니까
- 7. % d이 (가) C로 형 변환 되었습니까?
- 8. smtplib은 순수한 파이썬입니까? 아니면 C로 구현 되었습니까?
- 9. 테스트 방법은 문자열이 C로 초기화 되었습니까?
- 10. uint8_t *와 char * 사이에 캐스팅. 무슨 일이야?
- 11. `find`와 비슷한 출력을`tree`와 같은 출력으로 변환합니다.
- 12. Java에서 JNI C로 메모리 누수 피하기
- 13. Java에서 Objective C로 XML 구문 분석 이식
- 14. 이 있습니까 <%와 <% =
- 15. Java에서 Thread.interrupt()와 Thread.currentThread.interrupt()의 차이점은 무엇입니까?
- 16. Java에서 System.load()와 System.loadLibrary의 차이점
- 17. C++에서 getrusage()와 비슷한 것을 찾으십시오.
- 18. SWT 용 Spy ++와 비슷한 것?
- 19. 안드로이드의 "컨텍스트"와 비슷한 bada에 클래스가 있습니까?
- 20. 코코아에서 getViewById()와 비슷한 것이 있습니까?
- 21. Android에서 repaint()와 비슷한 메소드가 Java에 있습니까?
- 22. ShowDialog()와 비슷한 MDI 자식 대기 닫기
- 23. C# 목록 캐스팅 <>
- 24. 이 IllegalArgumentException을 얻으려면 Java에서 무엇이 잘못 되었습니까?
- 25. Java에서 클래스를 문자열로 또는 그 반대로 캐스팅
- 26. C로 2 차원 배열을 어떻게 캐스팅 할 수 있습니까?
- 27. Android/Java에서 몇 바이트의 연결이 다운로드 되었습니까?
- 28. <MailDefinition>와 <%%> 자리
- 29. 코로나 SDK는 어떻게 작동합니까? 루아는 목표 C로 변환 되었습니까?
- 30. Java에서 this.method()와 method()의 차이점은 무엇입니까?
지금 연결이 끊어졌습니다. – Hubbitus
고마워요 @Hubbitus. 직렬화에 대해 설명하는 다른 링크로 변경했습니다. – vitaut