Programing/JAVA

Java ASN.1 추상구조체 디코딩 방법 How to decode ASN.1 Abstract Structure

리커니 2019. 3. 20.
반응형

ASN.1 추상구조체 디코딩 방법 How to decode ASN.1 Abstract Structure

 

이전 포스팅에서 .asn 확장자 파일을 jar 파일로 Export 하는 방법과

추상 구조체를 인코딩 하는 방법에 대하여 알아보았습니다.

 

Link : ASN.1 Java jar 파일 만드는 방법 How to make ASN.1 jar file

 

ASN.1 Java jar 파일 만드는 방법 How to make ASN.1 jar file

ASN.1 Java jar 파일 만드는 방법 How to make ASN.1 jar file ASN.1 은 특정 장치, 데이터 표현방식, 프로그래밍 언어 등에 종속되지 않도록 표준화된 OSI 계층모델의 표현계층 상에서 쓰이는 추상 구조체를

aljjabaegi.tistory.com

 

Link : ASN.1 구조체 생성 및 인코딩 방법

 

ASN.1 구조체 생성 및 인코딩 방법

ASN.1 구조체 생성 및 인코딩 방법 우선 ASN.1 구조체를 만들기 위해서는 .asn 확장자의 전문과 그 전문이 어떤구조인지 파악 할 수 있는 인터페이스 정의서가 필요합니다. 어떤 구조인지 알아야 원

aljjabaegi.tistory.com

 

이제 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 인/디코딩 방법에 대해 도움이 되셨으면 좋겠습니다.

 

 

반응형

댓글

💲 추천 글