Liest eine große Datei aus einem Javacard-Applet

Ich schreibe ein Applet, das 3 Dateien unterschiedlicher Größe mit 5, 7 und 11 KB speichert. Ich habe keine Probleme mit dem Speichern der Dateien im Applet. Aber wenn ich versuche, sie zurückzulesen, kann ich nur die ersten beiden (kleinere Dateien) lesen. Die dritte Datei löst eine Ausnahme aus:

javax.smartcardio.CardException: Could not obtain response
at sun.security.smartcardio.ChannelImpl.doTransmit(Unknown Source)
at sun.security.smartcardio.ChannelImpl.transmit(Unknown Source)

Ich habe versucht, das Problem herauszufinden, und ich habe herausgefunden, dass es mit der Größe der Datei zusammenhängt. Also habe ich eine Testdatei mit einer Größe von 7 KB erstellt und diese Datei Stück für Stück erhöht. Es hat funktioniert, bis ich 7905 Bytes erreicht habe. Dies bedeutet, dass 7905 Bytes die maximale Anzahl von Bytes sind, die ich aus dem Applet lesen kann. Ich verkette die Antwort mit Beispielcode:

public void readFile(APDU apdu, short[] offset, short selectedFile, short MAX_APDU_SEN,       byte OFFSET_SENT) {
    byte[] file = getFile(selectedFile); 
    if (file == null) {
    + ISOException.throwIt(ISO7816.SW_FILE_NOT_FOUND);+
    }
    // work out how many bytes to send this time and how many will be left
    short remain = (short) (file.length - offset[OFFSET_SENT]);
    boolean chain = remain > MAX_APDU_SEN;
    short sendLen = chain ? MAX_APDU_SEN : remain;
    apdu.setOutgoing();
    apdu.setOutgoingLength(sendLen);
    apdu.sendBytesLong(file, offset[OFFSET_SENT], sendLen);
    // Check to see if there are more APDU's to send
    if (chain) {
    +offset[OFFSET_SENT] = sendLen; // count the bytes sent
    ISOException.throwIt(ISO7816.SW_BYTES_REMAINING_00); // indicate there are more bytes     to come
    } else {+
    offset[OFFSET_SENT] = 0; // no more bytes to send
    }
}

Ich habe zwei verschiedene Kartentypen ausprobiert, nämlich Karten, die mit JC 2.2.1 (36 KB) und JC 2.2.2 (80 KB) kompatibel sind, aber alle verhalten sich gleich.

Irgendeine Hilfe bitte?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage