ディレクトリ ファイルの作成時に問題が発生しました。私は明らかに新しいオブジェクトを作成しているのではなく、参照のみを作成しています-どこで/なぜなのかまだわかりません!
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 の数で、1 はマスターファイルであるため、2 から始まります。援助のために = 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