External { public void encode(AsnOutputStream aos) throws AsnException { this.encode(aos, Tag.CLASS_UNIVERSAL, Tag.EXTERNAL); }  void decode(AsnInputStream ais); void encode(AsnOutputStream aos); void encode(AsnOutputStream aos, int tagClass, int tag); byte[] getEncodeType(); void setEncodeType(byte[] data); BitSetStrictLength getEncodeBitStringType(); void setEncodeBitStringType(BitSetStrictLength data); boolean isOid(); void setOid(boolean oid); boolean isInteger(); void setInteger(boolean integer); boolean isObjDescriptor(); void setObjDescriptor(boolean objDescriptor); long[] getOidValue(); void setOidValue(long[] oidValue); long getIndirectReference(); void setIndirectReference(long indirectReference); String getObjDescriptorValue(); void setObjDescriptorValue(String objDescriptorValue); boolean isAsn(); void setAsn(boolean asn); boolean isOctet(); void setOctet(boolean octet); boolean isArbitrary(); void setArbitrary(boolean arbitrary);  }
@Test public void testEncode() throws Exception { byte[] data = new byte[] { 0x28, 0x23, 0x06, 0x07, 0x04, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, (byte) 0xa0, 0x18, (byte) 0xa0, (byte) 0x80, (byte) 0x80, 0x09, (byte) 0x96, 0x02, 0x24, (byte) 0x80, 0x03, 0x00, (byte) 0x80, 0x00, (byte) 0xf2, (byte) 0x81, 0x07, (byte) 0x91, 0x13, 0x26, (byte) 0x98, (byte) 0x86, 0x03, (byte) 0xf0, 0x00, 0x00 }; External external = new External(); external.setOid(true); external.setOidValue(new long[] { 0, 4, 0, 0, 1, 1, 1, 1 }); external.setAsn(true); external.setEncodeType(new byte[] { (byte) 0xa0, (byte) 0x80, (byte) 0x80, 0x09, (byte) 0x96, 0x02, 0x24, (byte) 0x80, 0x03, 0x00, (byte) 0x80, 0x00, (byte) 0xf2, (byte) 0x81, 0x07, (byte) 0x91, 0x13, 0x26, (byte) 0x98, (byte) 0x86, 0x03, (byte) 0xf0, 0x00, 0x00 }); AsnOutputStream asnOs = new AsnOutputStream(); external.encode(asnOs); byte[] encodedData = asnOs.toByteArray(); System.out.println(dump(encodedData, encodedData.length, false)); assertTrue(Arrays.equals(data, encodedData)); }