Я хочу написать файл объекта с добавлением. У меня есть класс NewContact и основной класс ниже:Write ObjectOutputStream добавить файл, продолжить получать сообщение об ошибке StreamCorruptedException
private String name;
private String sex;
private String mail;
private String phone;
private String image;
//setter and getter method. removed it to avoid the long post.
public NewContact() {
}
public NewContact(String name, String sex, String phone, String mail, String image) {
this.name = name;
this.sex = sex;
this.mail = mail;
this.phone = phone;
this.image = image;
}
public String Xuat()
{
return this.getName()+" "+this.getSex()+" "+this.getPhone()+" "+this.getMail()+" "+this.getImage();
}
@Override
public String toString(){
//return this.name+" "+this.sex+" "+this.phone+" "+this.mail+" "+this.image;
return this.getName()+" "+this.getSex()+" "+this.getPhone()+" "+this.getMail()+" "+this.getImage();
}
///main class
public static void main(String[] args) throws IOException, ClassNotFoundException {
File file = new File("F:\\students.txt");
ArrayList<NewContact> students = new ArrayList<NewContact>();
students.add(new NewContact("Tom","Male","99245","[email protected]","sdgsg"));
students.add(new NewContact("Mark","Male","365465","[email protected]","sdgsg"));
students.add(new NewContact("Dave","Male","35346","[email protected]","sdgsg"));
FileOutputStream fo = new FileOutputStream(file,true);
ObjectOutputStream output = new ObjectOutputStream(fo);
for (NewContact s : students) {
output.writeObject(s);
//output.reset();
}
output.close();
fo.close();
FileInputStream is = new FileInputStream(file);
ObjectInputStream input = new ObjectInputStream(is);
try {
while(true) {
NewContact s = (NewContact)input.readObject();
System.out.println(s);
}
} catch (EOFException ex) {
}
}
вчера я боролся с этой проблемой в течение всего дня. Не мог работать. Если я просто напишу нормальный (без добавления), все будет в порядке. Но когда я пытаюсь добавить его, он продолжает получать ошибку StreamCorruptedException: недопустимый код типа: AC.
В ходе исследования, я даже добавил этот класс
public class AppendingObjectOutputStream extends ObjectOutputStream{
public AppendingObjectOutputStream(OutputStream out) throws IOException {
super(out);
}
@Override
protected void writeStreamHeader() throws IOException {
// do not write a header, but reset:
// this line added after another question
// showed a problem with the original
reset();
}
}
все еще не работает :(.
В частности, заголовок записывается, когда поток открыт (для вывода). –
Я уже пробовал это раньше, но не работает :( –
@StephenC на самом деле я сделал это раньше. даже попытался добавить «reset()»; в методе writeStreamHeader, но это не помогает :(. –