作的例子。这种OpenCard将迅速成为这个行业中的标准。
package java.commerce.MemoryCards;
import java.io.IOException;
import java.commerce.smartcards.*;
import java.commerce.gemplus.*;
public class CardStrings {
/**
* Write a String, since the card is modulo 8 and we are
* not using serialized objects -- the first two bytes are the
* length followed by six spare bytes. Strings longer than 4096 - 48
* bits will be truncated.
*/
public static void writeGFMString(String s ,
ISOCardReader isoreader) {
ISOCommand wcmd;
ISOCardinputStream winput;
int upper,lower;
short length = (short)s.length();
// Length of the input string
System.out.println("Length is " + length );
try {
// Write the control section out
wcmd = new ISOCommand(0, 0xd0, 0, 0, 8,0);
// Save the length
wcmd.data.writeShort( length );
System.out.println("Write out the Length");
winput = wcmd.execute(isoreader,
new GemplusReaderFailureHandler());
// Write the String out
int wholeAmount = length/8;
// Groups of 8
int remainder = length % 8;
// Remainder
// Write the String out groups of 8
for ( int l = 1; l <= wholeAmount; l++ ) { System.out.println("Writing 8 bytes at " + (l*8)); upper="(l" * 8 )>> 8;
lower = ( l * 8 ) & 0xff;
wcmd = new ISOCommand(0, 0xd0, upper, lower, 8,0);
int index = ( (l-1) * 8 );
wcmd.data.writeString(s.substring(index),8);
System.out.println("Write out bytes at " + index);
winput = wcmd.execute(isoreader,
new GemplusReaderFailureHandler());
}
// Write the remainder out
upper = ((wholeAmount+1) * 8 ) >> 8;
lower = ((wholeAmount+1) * 8 ) & 0xff;
wcmd = new ISOCommand(0, 0xd0, upper,
lower, remainder,0);
int index = ( wholeAmount * 8 );
wcmd.data.writeString(s.substring(index),remainder);
winput = wcmd.execute(isoreader,
new GemplusReaderFailureHandler());
} catch ( Exception e ) {
System.out.println( "Exception " + e);
e.printStackTrace();
}
}
/**
* Read a String, since the card is modulo 8 and we are
* not using serialized objects -- the first two bytes are the
* length followed by six spare bytes. Strings longer than 4096 - 48
* bits will be truncated.
*/
public static String readGFMString(ISOCardReader isoreader ) {
ISOCommand rcmd;
ISOCardinputStream rinput;
int upper,lower;
short length;
StringBuffer sb = new StringBuffer();
try {
// Read the control section
rcmd = new ISOCommand(0, 0xb0, 0, 0, 0, 8);
// Read the length
rinput = rcmd.execute(isoreader,new GemplusReaderFailureHandler());
length = (short)rinput.readShort();
System.out.println("The length is: " + length);
// Read the String
int wholeAmount = length/8; // Groups of 8
int remainder = length % 8; // Remainder
// Read the String in groups of 8
for ( int l = 1; l <= wholeAmount; l++ ) { System.out.println("Reading 8 bytes at " + (l*8)); upper="(l" * 8 )>> 8;
lower = ( l * 8 ) & 0xff;
rcmd = new ISOCommand(0, 0xb0, upper, lower, 0, 8);
rinput = rcmd.execute(isoreader,new GemplusReade
|