CardCommandAPDU extends CardAPDU { public final byte[] toByteArray() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { baos.write(header); if (lc > 255 || (le > 256 && lc > 0)) { baos.write(x00); baos.write((byte) (lc >> 8)); baos.write((byte) lc); } else if (lc > 0) { baos.write((byte) lc); } baos.write(data); if (le > 256) { if (lc == 0 || lc == -1) { baos.write(x00); } if (le >= 65536) { baos.write(x00); baos.write(x00); } else { baos.write((byte) (le >> 8)); baos.write((byte) le); } } else if (le > 0) { if (lc > 255) { baos.write((byte) (le >> 8)); baos.write((byte) le); } else { baos.write((byte) le); } } } catch (IOException ex) { LOG.error("Failed to create APDU in memory.", ex); } return baos.toByteArray(); } protected  CardCommandAPDU();  CardCommandAPDU(byte[] commandAPDU);  CardCommandAPDU(byte cla, byte ins, byte p1, byte p2);  CardCommandAPDU(byte cla, byte ins, byte p1, byte p2, byte le);  CardCommandAPDU(byte cla, byte ins, byte p1, byte p2, short le);  CardCommandAPDU(byte cla, byte ins, byte p1, byte p2, int le);  CardCommandAPDU(byte cla, byte ins, byte p1, byte p2, byte[] data);  CardCommandAPDU(byte cla, byte ins, byte p1, byte p2, byte[] data, byte le);  CardCommandAPDU(byte cla, byte ins, byte p1, byte p2, byte[] data, short le);  CardCommandAPDU(byte cla, byte ins, byte p1, byte p2, byte[] data, int le); byte getCLA(); byte getINS(); byte getP1(); byte getP2(); byte[] getP1P2(); byte[] getHeader(); static byte[] getHeader(byte[] commandAPDU); int getLC(); @Override void setData(byte[] data); final void setBody(byte[] body); static byte[] getBody(byte[] commandAPDU); final void setLE(byte le); final void setLE(short le); final void setLE(int le); final int getLE(); final void setChaining(); final Iterable getChainingIterator(); final void setSecureMessaging(); final boolean isSecureMessaging(); final byte[] toByteArray(); String toHexString(); @Override String toString(); Transmit makeTransmit(byte[] slotHandle); Transmit makeTransmit(byte[] slotHandle, List<byte[]> responses); CardResponseAPDU transmit(Dispatcher dispatcher, byte[] slotHandle); CardResponseAPDU transmit(Dispatcher dispatcher, byte[] slotHandle, List<byte[]> responses);  }
@Test public void SMparsing() { String orig = "0C 84 00 00 0D 97 01 08 8E 08 74 F2 71 EF 73 64 20 02 00"; byte[] origBytes = StringUtils.toByteArray(orig, true); CardCommandAPDU apdu = new CardCommandAPDU(origBytes); byte[] copyBytes = apdu.toByteArray(); assertEquals(copyBytes, origBytes); }