2013-09-26 1 views
0

디렉토리 파일을 만들 때 문제가 발생합니다. 나는 분명히 새로운 Object를 생성하지는 않고 단지 참조 만 - 확실히 왜/확실하지는 않습니다! 지금JavaCard - AID가 저장되지 않았습니까? 배열을 마지막 요소로 덮어 씁니다.

DirectoryFile[] arrayDF = new DirectoryFile[8]; 

나는 새로운 DF 만들 때 :

numapp++; 
arrayDF[numApp] = new DirectoryFile(aid); 

과 오른쪽 그 후 나는 단순히 루프를 인쇄 numApp이/DFS 응용 프로그램의 수는

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); 

} 

1이 MasterFile이므로 2부터 시작합니다. 원조 는 = a00000000001 나는 그래서 모든 이미 저장 에이즈 얻을

A0 00 00 00 00 03 A0 00 00 00 00 03 A0 00 00 00 00 03 90 00 ................ 
    Status: No Error 

을 얻을

A0 00 00 00 00 01 90 00       ......... 
Status: No Error 

원조 = a00000000002에 대한 응답 나는 원조 = a00000000003에 대한

A0 00 00 00 00 02 A0 00 00 00 00 02 90 00 ................ 
Status: No Error 

를 얻을 수 여하튼 덮어 쓴다. 슈퍼 (원조)이 일에 내 실수가
 public abstract class File { 
      public byte[] aid = new byte[6]; 

      public File (byte[] aid) { 
       this.aid = aid; 
      } 
      public byte[] getAID() { 
       return aid; 
      } 
    } 

File.java

의 생성자를 호출

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

    } 

을 다음과 같이 DirectoryFile에서 나는합니까?

은 좀 더 테스트 후 나는 적어도 클래스 (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으로 변경됩니다.

+0

답변 해 주셔서 감사합니다. 'this.aid = aid; '대신'Util.arrayCopy (aid, (short) 0, this.aid, (short) 0, (short) 6); 변경 (불행히도)! – achiever