ASN.1 Java編譯器樣本

來源:互聯網
上載者:User
文章目錄
  • MyHTTP例子
MyHTTP例子

學習任何語言或標記的最好方法莫過於讀它的例子。這裡的樣本原型來自http://www.w3.org/Protocols/HTTP-NG/asn1.html

它是一個FHTTP GET請求的簡化形式。

對於我們的例子,假設我們需要應用以下的ASN.1模組MyHTTP.asn
:

MyHTTP DEFINITIONSAUTOMATIC TAGS ::=BEGIN   GetRequest ::= SEQUENCE {      header-only  BOOLEAN,      lock         BOOLEAN,      accept-types AcceptTypes,      url          Url,      ...,      timestamp    GeneralizedTime   }      AcceptTypes ::= SET {      standards BIT STRING { html(0), plain-text(1), gif(2), jpeg(3) } (SIZE(4)) OPTIONAL,      others    SEQUENCE OF VisibleString (SIZE(4)) OPTIONAL   }      Url ::= VisibleString (FROM("a".."z"|"A".."Z"|"0".."9"|"./-_~%#"))      v GetRequest ::= {header-only  TRUE,lock         FALSE,accept-types {standards { html, plain-text }},url          "www.asnlab.com",timestamp    "20100202020202Z"   }   END






1. 選擇 File
> New
> Project...

2. 在 ASN.1
類目中, 選擇ASN.1 Project
, 然後點擊 Next

3. 工程名輸入'MyHTTP' 然後點擊 Finish

4. 現在ASN.1 檔案可以添加到項目中,通過從其他地方複製到項目的來源目錄,或者從零開始建立ASN.1檔案。

5. 選擇 File
> New
> Other...

6. 在 ASN.1
類目中, 選擇 ASN.1 Module
, 然後點擊 Next

7. 模組名中輸入 'MyHTTP' 然後點擊 Finish

8. 在開啟的編輯器中輸入以上的原始碼。

9. 儲存 ASN.1 檔案, 編譯好的 Java類檔案
將自動產生。

10. 建立一個Java項目 test
,然後添加 ASN.1 Java運行庫
到編譯路徑。

11. 複製產生的Java類檔案到項目的合適的包(本例中是"MyHTTP") 目錄。

12. 在項目中建立類 TestMyHttp.java
,輸入如下內容:

import java.io.ByteArrayOutputStream;import java.util.Calendar;import MyHTTP.AcceptTypes;import MyHTTP.GetRequest;import MyHTTP.Standards;public class TestMyHttp {public static void main(String[] args) throws Exception {GetRequest getRequest=new GetRequest();getRequest.header_only=true;getRequest.lock=false;getRequest.accept_types=new AcceptTypes();getRequest.accept_types.standards=new Standards(new byte[1],(byte)4);getRequest.accept_types.standards.setHtml();getRequest.accept_types.standards.setPlain_text();getRequest.url="www.asnlab.com";Calendar cal = Calendar.getInstance();cal.set(Calendar.YEAR, 2010);cal.set(Calendar.MONTH, Calendar.FEBRUARY);cal.set(Calendar.DAY_OF_MONTH, 2);cal.set(Calendar.HOUR_OF_DAY, 2);cal.set(Calendar.MINUTE, 2);cal.set(Calendar.SECOND, 2);cal.set(Calendar.MILLISECOND, 0);cal.set(Calendar.ZONE_OFFSET, 0);getRequest.timestamp = cal.getTime();ByteArrayOutputStream bos=new ByteArrayOutputStream();getRequest.ber_encode(bos);byte[] bs=bos.toByteArray();for(int i=0; i<bs.length; i++) {System.out.printf("%02X ", bs[i] & 0xFF);}}}

13. 編譯該項目,如果自動編譯
被關掉。

14. 右擊檔案 TestMyHttp.java
然後選擇 Run as
> Java Application
:

30 2D 80 01 FF 81 01 00 A2 04 80 02 04 C0 83 0E 77 77 77 2E 61 73 6E 6C 61 62 2E 63 6F 6D 84 0F 32 30 31 30 30 32 30 32 31 34 30 32 30 32 5A
這裡詳細解釋BER編碼後的逐位元組逐位元的含義:
0x30 -- [0011|0000], [UNIVERSAL, CONSTRUCTED, 16(SEQUENCE)] - GetRequest
0x2D -- [0010|1101], length 45

0x80 -- [1000|0000], [CONTEXT, PRIMITIVE, 0(BOOLEAN)] GetRequest.header_only
0x01 -- [0000|0001], length 1
0xFF -- [0000|1111], value TRUE

0x81 -- [1000|0001], [CONTEXT, PRIMITIVE, 1(BOOLEAN)] GetRequest.lock
0x01 -- [0000|0001], length 1
0x00 -- [0000|0000], value FALSE

0xA2 -- [1010|0010], [CONTEXT, CONSTRUCTED, 2(SET)] - GetRequest.accept_types
0x04 -- [0000|0100], length 4

0x80 -- [1000|0000], [CONTEXT, PRIMITIVE, 0(BIT STRING)] AcceptTypes.standards
0x02 -- [0000|0010], length 2
0x04 -- [0000|0100], 4 unused bits
0xC0 -- [1100|0000], {html, plaint_text}

0x83 -- [1000|0011], [CONTEXT, PRIMITIVE, 3(VisibleString)] GetRequest.url
0x0E -- [0000|1100], length 14
0x77 0x77 0x77 0x2E 0x61 0x73 0x6E 0x6C 0x61 0x62 0x2E 0x63 0x6F 0x6D -- www.asnlab.com

0x84 -- [1000|0011], [CONTEXT, PRIMITIVE, 4(GeneralizedTime)] GetRequest.timestamp
0x0F -- [0000|1100], length 15
0x32 0x30 0x31 0x30 0x30 0x32 0x30 0x32 0x31 0x34 0x30 0x32 0x30 0x32 0x5A -- 20100202020202Z

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.