Пожалуйста, я новичок в программировании на Java. Я пытаюсь написать класс в байтовый поток вывода, а затем передать эти данные в простой массив.
Затем я читаю и реконструирую класс из массива байтов.
Я делаю это с помощью ObjectOutputStream и ObjectInputStream. но я не понимаю, почему я все еще получаю java.io.InvalidClassException: мой класс не имеет допустимого конструктора. лучшая помощь, которую я мог найти, находится в java.io.InvalidClassException: нет допустимого конструктора.
Мой код:
// this is the class I am writing to the ByteArrayOutputStream
public class CrtB extends X509v3CertificateBuilder implements Serializable {
private static final long serialVersionUID = 1234509876;
public CrtB(X500nEx arg0, BigInteger arg1, Date arg2, Date arg3,
X500nEx arg4, SubjectPublicKeyInfo arg5) {
super(arg0, arg1, arg2, arg3, arg4, arg5);
}
}
//this how I pass the class to the ByteArrayOutputStream and then reconstruct it
public class Testclass implements Serializable {
public CrtB getCrt(){
subpubInfo=SubjectPubInfo.getInstance(getPublicKey.getEncoded());
certbld=new CrtB(name1, serialNr, start, end,name2, subpubInfo);
return certbld; // certbld is a global variable
}
//writes to the ByteArrayOutputStream
private ByteArrayOutputStream writetoBAS(){
ByteArrayOutputStream bout=null;
try{
bout=new ByteArrayOutputStream();
ObjectOutputStream obj=new ObjectOutputStream(bout);
obj.writeObject(certbld);
obj.close();
}catch(Exception e){
e.printStackTrace();
}
return bout;
}
//read from byte array
private CrtB getbui(byte[] ar){
CrtB b=null;
try {
ByteArrayInputStream bin=new ByteArrayInputStream(ar);
ObjectInputStream oin=new ObjectInputStream(bin);
b=(CrtB)oin.readObject();
System.out.println("successfully transferred");
}catch (Exception e){
e.printStackTrace();
}
return b;
}
public static void main(String[] args) {
Testclass rqR=new Testclass();
rqR.CrtB();
byte[] br=rqR.writeBAS().toByteArray();
CrtB b=rqR.getbui(br);
}
}
Может ли кто-нибудь помочь мне или дать мне подсказку.
getCrt()
, который создает новый экземплярCrtB
из набора данных. Затем вместо того, чтобы пытаться сериализоватьCrtB
, вы можете создать оболочкуclass
для этого набора данных, а затем записать его вByteArrayOuputStream
, после чего вы можете десериализовать класс оболочки и воспроизвести объектCrtB
. Кстати,X509v3CertificateBuilder
действительно нужно писать? 17.01.2014X509v3CertificateBuilder
, вX509v3CertificateBuilder
, но вы можете использовать поля десериализованного объекта этого класса для создания нового экземпляраX509v3CertificateBuilder
. 17.01.2014