11월, 2016의 게시물 표시

Java Struct를 이용한 데이터 통신

 C 혹은 C++를 사용하여 구현된 시스템 간의 데이터 통신을 구현할 때, 통신 프로토콜을 struct로 정의하는 방법이 많이 사용된다. 수신 측에서는 바이트 순서(endian)를 고려하여, 수신한 데이터를 미리 정의된 struct 변수에 그대로 할당하기만 하면 된다. 하지만 송신 혹은 수신 측을 C가 아닌 언어로 구현해야 할 때는 약간의 수고가 따른다. 보통은 byte 배열을 사용해 미리 정의된 struct와 동일한 메모리 크기를 할당한 후, struct의 각 필드에 따라 일일히 데이터를 파싱해주어야 한다. 이러한 방법은 구현 시 실수가 발생할 가능성이 높고 자료구조의 수정이나 디버깅도 어렵다. Javolution  Javolution은 Java를 실시간 시스템에 적합하도록 지원하기 위해 고성능의 클래스와 유틸리티들을 제공해 주는 라이브러리이다. Java 표준 라이브러리에서 제공하는 StringBuilder, ArrayList, HashMap 등의 클래스는 최초 생성 시 지정된 capacity를 재조정하는데 큰 비용이 따르는데, Javolution에서는 이를 개선한 TextBuilder, FastTable, FastMap 클래스 등을 제공한다. 또한 C/C++과의 상호연결을 위한 Struct, Union 클래스도 제공한다. 본 글에서는 Javolution에서 제공하는 Struct와 Union을 이용하여 Java 환경에서 C로 정의된 struct 및 union과 같은 자료구조를 쉽게 구성할 수 있는 방법에 대해 소개한다. 보다 자세한 내용은 다음 웹페이지를 참조하기 바란다. http://javolution.org/ Struct 클래스  C/C++과는 다르게, Java 객체의 메모리 배치는 컴파일러에 의해 결정되지 않는다. 메모리 상의 객체들의 배치는 실행 시간(run time)에 이루어지며 인터프리터(또는 Just-In-Time 컴파일러)에 의해 결정된다. 이 방식은 Java에서 객체를 동적으로 로딩하거나 바인딩할 수 있게 해주지만, C/C