我有一个JavaCard并且可以调用JCSystem.getAvailableMemory(MEMORY_TYPE_PERSISTENT)并从我的applet返回它,但是如果它超过32767字节,我想要一个确切的值。
答案 0 :(得分:2)
Javacard支持GP 2.2 + ETSI
如果您的卡支持Global Platform 2.2和ETSI,您可以使用GET DATA命令。
GP卡规范2.2第11.3节规定
Tag ‘FF21’: Extended Card Resources Information available for Card Content Management, as defined in ETSI TS 102 226.
在ETSI 102.226第8.2.1.7.2节中:
成功执行命令后,GET DATA响应数据字段应按GlobalPlatform [4]中的定义进行编码。在命令消息的参考控制参数P1和P2中引用的TLV编码数据对象的值是:
Length Description Value
1 Number of installed application tag '81'
1 Number of installed application length X
X Number of installed application
1 Free non volatile memory tag '82'
1 Free non volatile memory length Y
Y Free non volatile memory
1 Free volatile memory tag '83'
1 Free volatile memory length Z
Z Free volatile memory
此命令的响应不限于short
值,因为它使用的是TLV格式,这意味着您可以检查超过32767字节的空闲内存
答案 1 :(得分:1)
通常,使用标准Java Card API无法从卡中获取确切的可用内存量。由于大多数Java卡甚至没有整数支持,因此您可以从API方法获得的最大值是32767(签名短的上限)。
如果幸运的话,卡/ OS制造商可能会有一些专有的API方法。我已经看过NXP JCOP卡的一些专有API,但如果它超过签名短片的上限,它们都不能获得可用内存量。