如何在 Java Card 中连接数组

How to concatenate arrays in Java Card

Java 有很多连接数组的方法,但似乎 Java Card 有 none 个。有办法吗?


例如我想连接这两个数组

byte[] a= {(byte) 'P', (byte) 'K'};
byte[] b= {(byte) 'T', (byte) 'G'};

我想要的:

byte[] C= {(byte) 'P', (byte) 'K', (byte) 'T', (byte) 'G'};

有什么办法吗?

不,没有 API 可用于此。

在Java卡片资源稀缺,所以数组永远不会串联。数组串联会创建一个新对象,这意味着必须申请额外的内存。

最佳做法是仅使用 new 运算符创建对象(对于 EEPROM/flash 或 JCSystem.makeTransientByteArray 中的持久数组,以及在安装/个性化期间用于临时内存 (RAM) 的朋友,而不是在现场正常操作期间。

为了连接数组,您可以使用带有偏移量和长度的 Util.arrayCopy() 来在现有数组(包括 APDU 缓冲区)之间复制数据。

同样,几乎所有使用缓冲区的库调用都将始终需要偏移量和长度,因此可以使用 pre-existing 数组(缓冲区)- 以边界检查为代价,您必须自己做.