JAVA card 应用开发(七) JAVA 卡数据(永久数据/临时数据)
来源:互联网 发布:淘宝卖什么最暴利 编辑:程序博客网 时间:2024/05/30 04:47
JAVA 卡对象
JAVA CARD 的存储器件:
a. ROM: 永久保存程序和数据,虚拟机,API等;(Applets也可以放这里)
b. RAM: 栈数据,临时对象;
c. EEPROM: Applet的类,长生命周期的数据;(写操作比RAM慢1000倍)
因此,ROM是存放JCRE的基本程序和数据,而RAM用于保存当前会话需要的临时数据,EEPRO就用于保存跨会话的数据。
下面分别描述:
1. ROM:
掩膜的时候,把这块的数据固定下来,伴随整个卡片的生命周期不改变。除非把Applets保存到这个区域。
2. RAM:
Applet运行过程中保存的临时数据、数组和对象。临时数据就是栈数据,程序运行过程中的中间数据,而临时对象,则没那么简单。临时对象并不是对象是临时的,而是对象的数据是临时的,一个Applet在生命期对一个临时对象只建立一次,而且把该对象的引用保存在一个永久域里。只有具有基本类型成分的数组或具有对象引用类型成分的数据,才是临时的,这里面就包括临时数组和临时对象。
临时对象是通过API建立的,数据不能跨过两个CAD sessions,对于一个域的修改不是原子型的。
临时对象的属性使之对于少量的,要经常修改的,但无需在CAD sessions间保留的临时applet数据是很理想的对象。有两种类型的临时数据对象,即CLEAR_ON_RESET 和CLEAR_ON_DESELECT。注意当定义为CLEAR_ON_DESELECT,卡片复位的时候,该临时对象的数据也会被清空。
建立类JCSystem中的临时数组的方法
方法 方法调用的结果
Public static boolean[]
MakeTransientBooleanArray(short length,byte event) 建立一个临时布尔数组
Public static byte[]
MakeTransientByteArray(short length,byte event) 建立一个临时字节数组
Public static short[]
MakeTransientShortArray(short length,byte event) 建立一个临时short数组
Public static object[]
MakeTransientObjectArray(short length,byte event) 建立一个临时对象数组
3. EEPROM:
使用NEW操作符号建立;可以跨CAD sessions保持不变;对于单一域的修改是原子型的;可以被临时对象引用,也可以引用临时对象。
前面就三种存储器的类型分别讨论如何使用,实际上对于应用开发,只用到ROM和EEPROM,也就是临时数据和永久数据的区别,最重要的点就是建立的方法不一样,一个是API建立,一个直接new。所以,我们得到一个对象,有可能是通过API建立的,也可能是NEW的,这个时候,我们可以通过:public static byte isTransient(ObjecttheObject)的返回值判断是:CLEAR_ON_RESET 或CLEAR_ON_DESELECT或JCSystem.NOT_A_TRANSIENT_OBJECT指出该对象的属性,可以知道该对象保存在什么地方。
关于优化:
智能卡的资源是非常有限的,不能无限制或者杂乱无章地new或者申请临时数据,否则很容易因为不够空间而抛出异常。因为数据通过new或者API申请空间后,释放(requestObjectDeletion)速度很慢,甚至有可能卡片不支持垃圾回收机制。
参考书籍:《java card for smart card》
说明:《JAVA card 应用开发》系列博文是我在学习Java卡过程中的记录,有不对的地方,请指出。
- JAVA card 应用开发(七) JAVA 卡数据(永久数据/临时数据)
- JAVA card 应用开发(六) 个人化数据的线路安全和数据安全
- android应用开发(七)—— 数据储存1
- 大数据之HDFS应用开发(java API)
- Java语言入门教程(七):Java类中的各种数据
- java数据引擎(七):总结
- JAVA card 应用开发(四) Java Card CAP 文件组件分析
- Java数据对象(JDO)的应用
- Java数据对象(JDO)的应用
- Flex JAVA 数据交互 (BlazeDS应用)
- JAVA card 应用开发(一) 创建第一个APPLET
- JAVA card 应用开发(二) 在项目增加APPLET
- JAVA card 应用开发(五) JCOP的调试方法
- JAVA card 应用开发(一) 创建第一个APPLET
- JAVA card 应用开发(二) 在项目增加APPLET
- JAVA card 应用开发(五) JCOP的调试方法
- JAVA card 应用开发(五) JCOP的调试方法
- 【密钥算法】Java加密技术(七)---ECC 数据加密算法
- Linux系统调用和库函数
- xcode 自定义build Setting
- MVC @model 模型定义
- 关于CCSprite、CCtexture2D与CCImage之间的关系
- System.exit(0)和System.exit(1)区别
- JAVA card 应用开发(七) JAVA 卡数据(永久数据/临时数据)
- android webview setBuiltInZoomControls 与 onTouch 冲突解决
- POJ1503
- 设计模式-抽象工厂(Demo)
- android如果通过logcat来截取Log
- [C++]排序函数sort()用法
- 理解Linux系统负荷
- 【剑指offer】面试题3:二位数组中的查找 java
- 字符编码笔记:ASCII,Unicode和UTF-8