如何在 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 数组(缓冲区)- 以边界检查为代价,您必须自己做.
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 数组(缓冲区)- 以边界检查为代价,您必须自己做.