JAVAcard应⽤开发(七)JAVA卡数据(永久数据临时数据)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 ssions,对于⼀个域的修改不是原⼦型的。
临时对象的属性使之对于少量的,要经常修改的,但⽆需在CAD ssions间保留的临时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 ssions保持不变;对于单⼀域的修改是原⼦型的;可以被临时对象引⽤,也可以引⽤临时对象。
前⾯就三种存储器的类型分别讨论如何使⽤,实际上对于应⽤开发,只⽤到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卡过程中的记录,有不对的地⽅,请指出。