ASN.1 Java编译器由编译器和一组功能丰富的运行库jar包组成。 编译器翻译ASN.1类型到Java类. 运行库提供编码,解码和各种其它操作应用程序的消息的功能。
ASN.1 Java运行库完全是面向元信息的,所有元信息在运行时加载,使用后可以释放。
ASN.1 Java 编译器生成尽可能的原始类型或普通的旧式Java对象(POJO),ASN.1类型和Java类之间的映射是非常简单和直观,你不必学习一些特殊的API为了使用这些代码。这样最大限度地减少您的时间和努力去熟悉所产生的代码。
可扩展的转换器类,消息可以被解码,即使没有消息实体。可定制的应用得到回调时,每一个组件的消息被解码。
生成ASN.1类型对应的类型安全的Java类和元数据,最大限度地减少生成的代码,从而导致更高的代码重用率。
一些假设使编码/解码速度大大提高。当然,这些假设也构成一定的局限性。
ASN.1 Java运行库是完全用Java写的,因此可以运行在任何JVM上面,包括资源有限的环境,如移动电话,PDA等等。
由于ASN.1 C++编译扩展了ASN.1开发工具,它具有ASN.1开发工具的所有限制。
为了编解码优化目的,长整型被用来保存标签tag,因此能支持表示的最大tag值是2097151(221)-1,但这几乎对所有的ASN.1规范都不是问题。
ENUMERATED类型的枚举个数,BIT STRING类型的比特长度,OCTET STRING类型的字节长度,SEQUENCE(OF)/SET(OF)类型或CHOICE类型的成员类型个数都不能超过231-1,这通常对所有的ASN.1规范也不是问题。
INTEGER类型的值必须在 -263~263-1的范围之内,(也就是说,BigInteger等任意大的整数不支持) 。 现在支持任意大的整数BigInteger 。
REAL类型的值总是作为二进制形式编码和解码,十进制的编码不能正确被解码。REAL类型的值精度不能超过Java语言的double。(也就是,BigDecimal等任意精度的浮点数不支持) 。
SET OF类型的值的规范编码中,动态排序不支持,因为它十分耗费内存和CPU。因此,推荐在使用SET OF类型的地方一律改用SEQUENCE OF类型。