0
我有序列化对象并将其存储在二进制文件中的功能,也是另一个对象,用于统计目前为止我已存储在文件中的对象数量,因此我可以使用计数器稍后再通过该文件并反序列化并阅读它。 这是我写的功能:从java中的二进制文件中读取对象
Class2 dad = new Class2(DadName.getText(), DadLastName.getText());
Class1 son = new Class1(FirstName.getText(), dad, "Session");
// Write object to file
FileOutputStream outStream = new FileOutputStream(new File("MainStore.dat"), true);
ObjectOutputStream objectOutputFile = new ObjectOutputStream(outStream);
objectOutputFile.writeObject(son);
objectOutputFile.close();
// Update the objectcounter file by
// Maintenance is a class I use just to save object contain information about number of files,increase them, decrease them.
Maintenance check = new Maintenance();
FileInputStream inStream = new FileInputStream("Counter.dat");
ObjectInputStream objectInput = new ObjectInputStream(inStream);
check = (Maintenance) objectInput.readObject();
inStream.close();
check.increaseObject();
FileOutputStream outStream1 = new FileOutputStream("Counter.dat");
ObjectOutputStream objectOutputFile1 = new ObjectOutputStream(outStream1);
objectOutputFile1.writeObject(check);
objectOutputFile1.close();
先前的功能工作得很好,下一步就是函数读取读取的对象从文件回来,我用Counter.dat看到存储在MainStore对象的数量。 dat,它给了我正确的编号。 这里是读功能:
// Read Counter file to know how many stored objects to go through them
Maintenance check = new Maintenance();
FileInputStream inStream = new FileInputStream("Counter.dat");
ObjectInputStream objectInput = new ObjectInputStream(inStream);
check = (Maintenance) objectInput.readObject();
int Counter1 = check.getObjectsNumber(); // function I created in the Maintenance class to return number of object stored
inStream.close();
// Read the stored objects
//here is my problem begin
FileInputStream inStream2 = new FileInputStream("MainStore.dat");
ObjectInputStream objectInputFile = new ObjectInputStream(inStream2);
// Create array of objects
Class1[] arrayOfObjects = new Class1[Counter1];
// Read the serialized objects from the file.
for (int i = 0; i < Counter1; i++) {
arrayOfObjects[i] = (Class1) objectInputFile.readObject(); // here is the error pointed by compiler
}
objectInputFile.close();
for (int i = 0; i < 2; i++) {
// here I should have array of all objects ready to read details
}
一切都看起来不错,除了最后一位“//读取从序列化对象”。它给了我这个错误
Caused by: java.io.StreamCorruptedException: invalid type code: AC
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at registerController.CheckPlaceAvailabilityAction(registerController.java:120)
... 58 more
,当我只有读一个对象来测试它,它的工作完美,并返回第一个存储的对象对我来说,错误发生了,当我尝试读取所有存储的对象。
如果可以,您可能需要发布MVCE(http://stackoverflow.com/help/mcve)。 –
你为什么要坚持柜台?你确定你的文件在测试过程中没有被损坏吗?我建议删除它并重新开始一个新文件。 – JimmyB