asn1 java_ASN.1 Java编译器使用入门
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编译器使用入门相关推荐
- Java学习从入门到精通-旧版
为什么80%的码农都做不了架构师?>>> Java学习从入门到精通-旧版 http://tech.ccidnet.com/art/3737/20051017/465333_1. ...
- Java学习从入门到精通
Java Learning Path (一).工具篇 一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envi ...
- 从java到C++入门
C++基础知识 前言 基础 前言 当初为了赶一波互联网热潮自学了java,如今因为需要就从java转向C++开发,于是就有了java到C++入门,每次的学习我都会记录一下C++的学习历程. 基础 C+ ...
- 【janio】janio 官网 翻译 Janino 是一个超小、超快的 Java 编译器
1.概述 翻译:http://janino-compiler.github.io/janino/#janino-as-a%20compiler Janino 是一个超小.超快的 Java 编译器. J ...
- Java学习从入门到精通[转]
Java Learning Path (一).工具篇 一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime En ...
- java编程菜鸟入门01
写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: java编程菜鸟入门01 java对象和类 jav ...
- java基础知识入门大全(十年经验总结)
一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. j ...
- 真正的Java学习从入门到精通
一. 工具篇JDK (Java Development Kit) oF[l�bZk0 `WR4j- JDK 是整个Java的核心,包括了Java运行环境(Java Runtime Envirn ...
- 一篇文章让你从JAVA零基础入门`OOP`编程12.19
一篇文章让你从JAVA零基础入门OOP编程 前言: 此文为玄子,复习ACCP-S1课程后,整理的文章,文中对知识点的解释仅为个人理解. 配套PPT,站点源码,等学习资料 一.预科 1.1 JAVA 介 ...
最新文章
- CSS HACK:IE6、IE7、IE8、Firefox兼容性问题解决方案
- python3安装步骤mac-Mac 安装Python3
- beego07----web博客
- CPU100%不限性能和100%独享资源的区别
- awgn信道中的噪声功率谱密度_从OFC2020看高级算法在光通信中的应用
- windows : Jmeter自动化测试-eclipse+maven+jmeter
- Xilinx Platform Cable USB II 下载器驱动安装教程——Win10
- 小程序子组件向父组件传值_一套组件化、可复用、易扩展的微信小程序 UI 组件库...
- mybatis generator逆向工程使用
- [Usaco2007 Jan]Telephone Lines架设电话线
- http 请求默认时间_JMeter接口测试之HTTP请求默认值
- java编译生成哪些文件_java编译后生成什么文件?生成的文件包括什么?
- Spring实现多数据源配置
- 基于Android系统的IPv6网络接入分析
- Quartz-scheduler 定时器概述、核心 API 与 快速入门
- [ 原创 ] 概念01--中国财政真相:25省负债 全国只有6省1市在赚钱
- t470键盘拆解_看完你就想买——绝对良心级做工品质的ThinkPad T470拆解
- linux 字符 拨号上网,LINUX下用ADSL拨号上网
- matlab 去除最大值,TRIMMEAN 应用(求去掉最大或和最小值后的平均值的方法)
- java kafka设置偏移量_kafka实战宝典:手动修改消费偏移量的两种方式
热门文章
- Excel如何遍历提取文件夹目录的操作?
- 2020年最新SCI期刊影响因子查询
- 三、熊海CMS_v1.0-[Seay源代码审计]-[漏洞编码12人工审计]
- 网页版谷歌地图上标记多个点_Google正式放弃Beta版标记
- html5输入框增加语音,html5在输入框添加语音输入功能
- SMBJ5.0CA双向TVS管,在电路保护中的应用
- Meta-RL之Meta-Gradient Reinforcement Learning
- python求向量函数的雅可比矩阵_使用python,pytorch求海森Hessian矩阵
- 淘宝用户行为---用户价值分析
- 【Vue】Vue项目报错Analyzer will use module sizes from stats file.