我想序列化一些对象到一个文件。特别是,当我尝试写java序列化导致utfdataformatexception
public void execute(PipelineContext context) throws Exception {
FileOutputStream fos = new FileOutputStream("test_audit_trail2.objects");
ObjectOutputStream oos = new ObjectOutputStream(fos);
BigInteger rho = (BigInteger) context.get("rho");
BigInteger p = (BigInteger) context.get("p");
BigInteger xS = (BigInteger) context.get("xs");
BigInteger zSBar = (BigInteger)context.get("zsbar");
int nS = (Integer) context.get("ns");
P2PShuffler ownShuff = (P2PShuffler) context.get("shuffler");
HexCryptor cryptor = (HexCryptor) context.get("cryptor");
String[] PRPrimePrimeBar = (String []) context.get("pr_prime_prime_bar");
P2PAuditTrailGenerator ownATG = (P2PAuditTrailGenerator) context.get("p2p_audit_trail_generator");
int kS = (Integer) context.get("ks");
oos.writeObject(rho);
oos.writeObject(p);
oos.writeObject(xS);
oos.writeObject(zSBar);
oos.writeObject(ownShuff);
oos.writeObject(cryptor);
oos.writeObject(PRPrimePrimeBar);
oos.writeObject(ownATG);
oos.writeObject(nS);
oos.writeObject(kS);
这样呢OK,所有的writeObject成功,我如实地关闭相应的流。然而,当我尝试通过调用的readObject()重建回所有对象,我所遇到的UTFDataFormatException
java.io.UTFDataFormatException
at java.io.ObjectInputStream$BlockDataInputStream.readUTFSpan(ObjectInputStream.java:3081)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(ObjectInputStream.java:3006)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(ObjectInputStream.java:2819)
at java.io.ObjectInputStream.readUTF(ObjectInputStream.java:1050)
at java.io.ObjectStreamClass.readNonProxy(ObjectStreamClass.java:614)
at java.io.ObjectInputStream.readClassDescriptor(ObjectInputStream.java:808)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1564)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1315)
at java.io.ObjectInputStream.skipCustomData(ObjectInputStream.java:1911)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1873)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at edu.foo.peer.pipeline.AuditTrailCheckStageTest.setUp
注释掉readObject
和writeObject
一一之后,似乎离开P2PAuditTrailGenerator
出这个让我成功读取所有对象。看看这个类,看起来没有字符串相关的对象。
public class P2PAuditTrailGenerator implements Serializable {
private int num;
private BigInteger phi;
private BigInteger rho;
/**
* @param auditTrailSecretKeys The secret keys used for audit trail
*/
private BigInteger[] auditTrailSecretKeys;
private BigInteger[] encAuditTrails;
private Random rnd;
public BigInteger [] getAuditTrailSecretKeys(){
return auditTrailSecretKeys;
}
public P2PAuditTrailGenerator(int num, BigInteger rho, BigInteger phi) {
this.num = num;
this.phi = phi;
this.rho = rho;
auditTrailSecretKeys = new BigInteger[num];
encAuditTrails = new BigInteger[num];
rnd = new Random();
}
public BigInteger[] generateATs() {
for (int i = 0; i < num; i++) {
//assuming the security parameter is always 512 or 1024;
auditTrailSecretKeys[i] = new BigInteger(200, rnd).mod(phi);
encAuditTrails[i] = rho.modPow(auditTrailSecretKeys[i], phi);
}
return encAuditTrails;
}
}
我是错误的类,如果没有,我的实现有什么问题?
嗨你解决了这个问题吗?我面对同样的,需要帮助。克里斯说我的班级没有参数构造函数。 – Amogh