JAVA에서 object를 byte array로 변환 하는 방법입니다.
object를 byte array로 변환하는 가장 쉬운 방법으로는 Object 직렬화 ObjectOutputStream를 사용하는 방법이 있습니다.
하지만 Object 직렬화는 자바에 한해서만 호환이 된다는 문제가 있습니다.
Object 직렬화는 이기종 (c언어, .NET 등)과 소켓통신할 때 사용할 수 없습니다.
그래서 찾은 방법이 ByteArrayOutputStream 를 사용하는 것입니다.
아래는 16바이트로 구성한 클래스 객체를 byte[] 로 변환한 예제 입니다.
범용적으로 사용할 수 있게 함수 형태로는 구현하려면 자바 리플렉션 개념을 사용해야 할 것 같습니다.
public class ProtocolDto {
public byte sender;
public byte receiver;
public short cmd;
public short error;
public short warning;
public int reserved;
public int data_length;
}
ProtocolDto protocolDto = new ProtocolDto();
// Object to Byte[] 변환
byte[] dtoByteArray = null;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(byteArrayOutputStream);
try {
dataOutputStream.writeByte(protocolDto.sender);
dataOutputStream.writeByte(protocolDto.receiver);
dataOutputStream.writeShort(protocolDto.cmd);
dataOutputStream.writeShort(protocolDto.error);
dataOutputStream.writeShort(protocolDto.warning);
dataOutputStream.writeInt(protocolDto.reserved);
dataOutputStream.writeInt(protocolDto.data_length);
dataOutputStream.flush();
dtoByteArray = byteArrayOutputStream.toByteArray();
} finally {
dataOutputStream.close();
byteArrayOutputStream.close();
}
// Result 16bytes
System.out.println(dtoByteArray.length);