创建目录文件时遇到问题。我显然不是在创建一个新对象,而只是创建一个参考 - 只是仍然不确定在哪里/为什么!
DirectoryFile[] arrayDF = new DirectoryFile[8];
现在当我创建一个新的 DF 时:
numapp++;
arrayDF[numApp] = new DirectoryFile(aid);
之后我只是循环打印出来
APDU apdu = APDU.getCurrentAPDU();
apdu.setOutgoing();
apdu.setOutgoingLength((short) 21);
for (i = 2; i <= numApp; i++) {
apdu.sendBytesLong(arrayDF[i].getAID(), (short) 0, (short) 6);
}
其中 numApp 是应用程序/DF 的数量,从 2 开始,因为 1 是 MasterFile。援助 = a00000000001 我得到
A0 00 00 00 00 01 90 00 .........
Status: No Error
作为对援助的回应= a00000000002 我得到
A0 00 00 00 00 02 A0 00 00 00 00 02 90 00 ................
Status: No Error
援助 = a00000000003 我得到
A0 00 00 00 00 03 A0 00 00 00 00 03 A0 00 00 00 00 03 90 00 ................
Status: No Error
所以所有已经保存的 AID 都会以某种方式被覆盖。在 DirectoryFile 我做如下
public DirectoryFile(byte[] aid) {
super(aid);
for (byte i = 0; i < activatedFiles.length; i++)
activatedFiles[i] = false;
}
其中 super(aid) 调用 File.java 的构造函数
public abstract class File {
public byte[] aid = new byte[6];
public File (byte[] aid) {
this.aid = aid;
}
public byte[] getAID() {
return aid;
}
}
我这样做的错误在哪里?
经过更多测试后,我至少发现类(DirectoryFile,File)应该可以正常工作:
aDF[j] = new DirectoryFile(aid1);
j++;
aDF[j] = new DirectoryFile(aid2);
j++;
aDF[j] = new DirectoryFile(aid3);
j++;
aDF[j] = new DirectoryFile(aid4);
j++;
APDU apdu = APDU.getCurrentAPDU();
apdu.setOutgoing();
byte[] myi = new byte[1];
apdu.setOutgoingLength((short) 28);
for (j = 0; i < 4; i++) {
myi[0] = i;
apdu.sendBytesLong(myi, (short) 0, (short) 1);
apdu.sendBytesLong(aDF[i].getAID(), (short) 0, (short) 6);
将打印
00 A0 00 00 00 00 01 01 A0 00 00 00 00 02 02 A0 ................
00 00 00 00 03 03 A0 00 00 00 00 04 90 00 ..............
Status: No Error