ASN.1 Java编译器使用入门

学习任何语言或标记的最好方法莫过于读它的例子。在本节中教程中,我们将引导您创建并运行一个简单的ASN.1应用。更多详细信息,请参阅ASN.1 Java编译器用户指南。

安装ASN.1 Java编译器

点击 这里 查看如何下载和安装的ASN.1 SDK和ASN.1 C++编译器插件的说明。

设置License Key

申请一个试用License或从ASN Lab网站购买一个永久License。 在Eclipse中,选择Windows (在Mac机器, Eclipse) > Preferences > ASN.1 > ASN.1 Java Compiler打开ASN.1 Java Compiler首选项页面。在General section中输入License Key,然后点击 OK。

MyHTTP例子

MyHTTP例子改编自

http://www.w3.org/Protocols/HTTP-NG/asn1.html,

它是一个FHTTP GET请求的简化形式。

对于我们的例子,假设我们需要应用以下我们已经在ASN.1开发工具

使用入门中看到过的ASN.1模块。

选择 File > New > Project...

在 ASN.1 类目中, 选择 ASN.1 Project, 然后点击 Next.

工程名输入 'MyHTTP' 然后点击 Finish.

现在ASN.1 文件可以添加到项目中,通过从其他地方复制到项目的源目录,或者按从以下步骤零开始创建ASN.1文件:

选择 File > New > Other...

在 ASN.1 类目中, 选择 ASN.1 Module, 然后点击 Next.

模块名中输入 'MyHTTP' 然后点击Finish.

在开启的编辑器中输入以下的源代码:

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"|"./-_~%#"))

myRequest GetRequest ::= {

header-only TRUE,

lock FALSE,

accept-types {

standards { html, plain-text }

},

url "www.asnlab.org",

timestamp "20121221121221Z"

}

END

保存ASN.1 文件, 编译好的Java类文件将自动生成(如果没有,请检查License Key是否设置好)。

创建一个Java项目test, 然后添加ASN.1 Java运行库到编译路径。

复制生成的Java类文件到项目的合适的包(本例中是"MyHTTP") 目录。

在项目中创建类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.org";

Calendar cal = Calendar.getInstance();

cal.set(Calendar.YEAR, 2012);

cal.set(Calendar.MONTH, Calendar.DECEMBER);

cal.set(Calendar.DAY_OF_MONTH, 21);

cal.set(Calendar.HOUR_OF_DAY, 12);

cal.set(Calendar.MINUTE, 12);

cal.set(Calendar.SECOND, 21);

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

System.out.printf("%02X ", bs[i] & 0xFF);

}

}

}

编译该项目,如果自动编译Build automatically被关掉。

右击文件 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 6F 72 67 84 0F 32 30 31 32 31 32 32 31 31 32 31 32 32 31 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 0x6F 0x72 0x67 -- www.asnlab.org

0x84 -- [1000|0011], [CONTEXT, PRIMITIVE, 4(GeneralizedTime)] GetRequest.timestamp

0x0F -- [0000|1100], length 15

0x32 0x30 0x31 0x32 0x31 0x32 0x32 0x31 0x31 0x32 0x31 0x32 0x32 0x31 0x5A -- 20121221121221Z

更多信息

关于ASN.1 Java运行库的更多信息, 请参阅ASN.1 Java运行库用户指导。

asn1 java_ASN.1 Java编译器使用入门相关推荐

  1. Java学习从入门到精通-旧版

    为什么80%的码农都做不了架构师?>>>    Java学习从入门到精通-旧版 http://tech.ccidnet.com/art/3737/20051017/465333_1. ...

  2. Java学习从入门到精通

    Java Learning Path (一).工具篇 一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envi ...

  3. 从java到C++入门

    C++基础知识 前言 基础 前言 当初为了赶一波互联网热潮自学了java,如今因为需要就从java转向C++开发,于是就有了java到C++入门,每次的学习我都会记录一下C++的学习历程. 基础 C+ ...

  4. 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器

    1.概述 翻译:http://janino-compiler.github.io/janino/#janino-as-a%20compiler Janino 是一个超小.超快的 Java 编译器. J ...

  5. Java学习从入门到精通[转]

    Java Learning Path (一).工具篇   一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime En ...

  6. java编程菜鸟入门01

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: java编程菜鸟入门01 java对象和类 jav ...

  7. java基础知识入门大全(十年经验总结)

    一.基础知识: 1.JVM.JRE和JDK的区别:     JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性.                   j ...

  8. 真正的Java学习从入门到精通

    一. 工具篇JDK (Java Development Kit) oF[l�bZk0   `WR4j-   JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirn ...

  9. 一篇文章让你从JAVA零基础入门`OOP`编程12.19

    一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后,整理的文章,文中对知识点的解释仅为个人理解. 配套PPT,站点源码,等学习资料 一.预科 1.1 JAVA 介 ...

最新文章

  1. CSS HACK:IE6、IE7、IE8、Firefox兼容性问题解决方案
  2. python3安装步骤mac-Mac 安装Python3
  3. beego07----web博客
  4. CPU100%不限性能和100%独享资源的区别
  5. awgn信道中的噪声功率谱密度_从OFC2020看高级算法在光通信中的应用
  6. windows : Jmeter自动化测试-eclipse+maven+jmeter
  7. Xilinx Platform Cable USB II 下载器驱动安装教程——Win10
  8. 小程序子组件向父组件传值_一套组件化、可复用、易扩展的微信小程序 UI 组件库...
  9. mybatis generator逆向工程使用
  10. [Usaco2007 Jan]Telephone Lines架设电话线
  11. http 请求默认时间_JMeter接口测试之HTTP请求默认值
  12. java编译生成哪些文件_java编译后生成什么文件?生成的文件包括什么?
  13. Spring实现多数据源配置
  14. 基于Android系统的IPv6网络接入分析
  15. Quartz-scheduler 定时器概述、核心 API 与 快速入门
  16. [ 原创 ] 概念01--中国财政真相:25省负债 全国只有6省1市在赚钱
  17. t470键盘拆解_看完你就想买——绝对良心级做工品质的ThinkPad T470拆解
  18. linux 字符 拨号上网,LINUX下用ADSL拨号上网
  19. matlab 去除最大值,TRIMMEAN 应用(求去掉最大或和最小值后的平均值的方法)
  20. java kafka设置偏移量_kafka实战宝典:手动修改消费偏移量的两种方式

热门文章

  1. Excel如何遍历提取文件夹目录的操作?
  2. 2020年最新SCI期刊影响因子查询
  3. 三、熊海CMS_v1.0-[Seay源代码审计]-[漏洞编码12人工审计]
  4. 网页版谷歌地图上标记多个点_Google正式放弃Beta版标记
  5. html5输入框增加语音,html5在输入框添加语音输入功能
  6. SMBJ5.0CA双向TVS管,在电路保护中的应用
  7. Meta-RL之Meta-Gradient Reinforcement Learning
  8. python求向量函数的雅可比矩阵_使用python,pytorch求海森Hessian矩阵
  9. 淘宝用户行为---用户价值分析
  10. 【Vue】Vue项目报错Analyzer will use module sizes from stats file.