2013-09-26 47 views
0

我在創建目錄文件時遇到問題。我顯然不是在創建一個新的對象,而只是參考 - 只是還不確定在哪裏/爲什麼!JavaCard - 未保存AID?數組被最後一個元素覆蓋

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是應用/ DFS數,從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 

因此,所有已保存的艾滋病得到以某種方式被覆蓋。 在DirectoryFile我做如下

public DirectoryFile(byte[] aid) { 
     super(aid); 
     for (byte i = 0; i < activatedFiles.length; i++) 
      activatedFiles[i] = false; 

    } 

其中超(援助)要求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,文件)應該工作得很好:

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 

回答

0

File實現是不正確的,您首先會生成一個由6個字節組成的數組,但不是將AID複製到它中 - 使用Util.arrayCopy() - 只需將其分配給傳入的數組的引用,即可引用前面生成的aid緩衝區。因此,如果在AID中傳入的值更改值,則File中的AID值也會更改。

+0

謝謝你的回答!我嘗試了'Util.arrayCopy(aid,(short)0,this.aid,(short)0,(short)6);'而不是'this.aid = aid;'但是結果不會改變(不幸)! – achiever