ASN.1 추상구조체 디코딩 방법 How to decode ASN.1 Abstract Structure
이전 포스팅에서 .asn 확장자 파일을 jar 파일로 Export 하는 방법과
추상 구조체를 인코딩 하는 방법에 대하여 알아보았습니다.
Link : ASN.1 Java jar 파일 만드는 방법 How to make ASN.1 jar file
Link : ASN.1 구조체 생성 및 인코딩 방법
이제 ASN.1 구조체를 디코딩 하는 방법에 대해서 알아보겠습니다.
위의 인코딩 방법 링크를 보시면 인코딩 룰에 맞는 Coder를 활용해
생성된 구조체를 ByteArrayOutputStream 으로 인코딩 하는 것을 확인 하실 수 있습니다.
그리고 인코딩된 ByteArrayOutputStream을 byteArray로 변환해 통신을 했다는 가정하에
받은 byteArray를 디코딩 하는 방법을 알아보겠습니다.
순서는 아래와 같습니다.
1. ASN1Project를 상속받은 최상위 클래스의 initialize 메소드 실행
2. 인코딩 룰에 맞는 코더 생성
3. 전달받은 byteArray를 ByteArrayInputStream 객체로 변환
4. 디코더를 활용해 ByteArrayInputStream을 자바 객체로 디코딩
그럼 코드를 보도록 하죠.
OSS를 통해 생성된 프로젝트를 보시면 ASN1Project 를 상속받은 클래스를 확인 하실 수 있습니다.
(최상위 패키지 내 java 파일)
그 클래스의 initialize 메소드를 실행 합니다. (그 클래스가 AccidentInfo라고 가정)
AccidentInfo.initialize();
이제 디코딩을 할 준비가 되었고, 인코딩 룰에 맞는 코더를 인스턴스화 합니다.
Coder coder = AccidentInfo.getPERUnalignedCoder();
여기서의 코드는 asn.1의 Coder 클래스 입니다.
import com.oss.asn1.Coder;
이제 코더를 활용해 전달받은 byteArray를 ByteArrayInputStream 으로 변환합니다.
ByteArrayInputStream source = new ByteArrayInputStream(byteArray);
이 ByteArrayInputStream과 디코드 할 추상 객체를 파라메터로 디코딩해 데이터를 파싱합니다.
Msg asnData = (Msg) corder.decode(source, new Msg());
그럼 추상 객체에 데이터가 바인딩 되며 get 메소드로 해당 변수의 값에 접근을 하실 수 있습니다.
예를들어 asnData 에 accidenType 변수가 PrintableString 타입이라면
String accidentType = asnData.getAccidentType().StringValue();
이렇게 데이터에 접근 하실 수 있습니다.
String.valueOf 메소드로 추출하시면 타입이 포함된 값이 추출되니 주의하세요.
이번 포스팅까지 총 3회에 걸쳐 ASN.1 에 대해 포스팅 하였습니다.
장점이 많기 때문에 활용도 점차 늘어날 것으로 판단됩니다.
자세히는 아니지만 기본적인 ASN.1 인/디코딩 방법에 대해 도움이 되셨으면 좋겠습니다.
'Programing > JAVA' 카테고리의 다른 글
[launch4j] jar파일로 exe 파일만드는 방법 how to make exe file to jar file (1) | 2019.06.11 |
---|---|
Spring Boot Multiple Database Configuration + Mybatis +HikariCP, MySQL, Oracle, Using Mapper annotation (1) | 2019.04.02 |
ASN.1 구조체 생성 및 인코딩 방법 (0) | 2019.03.18 |
ASN.1 Java jar 파일 만드는 방법 How to make ASN.1 jar file (0) | 2019.03.15 |
Spring boot dynamic scheduling quartz, 동적 스케쥴링 동적 cron (0) | 2018.12.27 |
댓글