ObjectInputStream/ObjectOutputStream: ошибки чтения/записи добавляемых объектов

Я добавляю Object с этим кодом.

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

public class ClaseAppendObjectStream extends ObjectOutputStream 
{
     public ClaseAppendObjectStream(OutputStream os) throws IOException 
     {
        super(os);
     }

     protected void writeStreamHeader() throws IOException 
     {  
         reset();
     }

 }

И это правильно записывает его в мой файл с помощью методов writeObject, но когда я использую «readObject ()» с «objectinputStream».

Дополнительная информация: я использовал «readObjectOverride» (используя подкласс), и это дало мне ту же ошибку.

Оказалось, что ошибка:

«Недопустимый заголовок потока: 79757200».

Я решил эту ошибку, НО он неправильно прочитал файл «.dat».

В моем файле .dat было 4 строки, но я прочитал только 1 строку. Мой код для чтения таков:

ObjectInputStream objetoInStr = new ObjectInputStream(new FileInputStream(sPath))
{
    protected void readStreamHeader() throws IOException 
    {
    }
};

ClassEmployer[] getData = (ClassEmployer[])objetoInStr.readObject();

objetoInStr.close();
String sPhrase="";                      
for(ClassEmployer e : getData )
{
   sPhrase=sPhrase+"Name: " + e.getName() + " Salary: "+ e.getSalary();
}   
objTPane.setText(sPhrase);

Он показывает мне только последнюю строку.

Я пишу свои строки так:

ClassEmployer[] employers= new ClassEmployer[1];
employers[0]= new ClassEm,ployer(objctotext1.getText().trim(),objecttext2.getText().trim());

FileOutputStream objetoFileOutputStream = new FileOutputStream(sPath,true);
BufferedOutputStream objetooutputBuffer = new BufferedOutputStream(objetoFileOutputStream);

ClaseAppendObjectStream objetoOutStr = new ClaseAppendObjectStream(objetooutputBuffer);
objetoOutStr.writeObject(employers) 

person Emilio López    schedule 25.02.2016    source источник


Ответы (1)


Я нахожу свое непонимание. Я читатель других вопросов и ответов о переполнении стека.

Сначала я правильно написал свой файл с помощью AppendClass:

 import java.io.IOException;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;

 public class ClaseAppendObjectStream extends ObjectOutputStream 
 {
      public ClaseAppendObjectStream(OutputStream os) throws IOException 
      {
          super(os);
      }

     protected void writeStreamHeader() throws IOException 
     {  
          reset();
     } 

 }

Прочитайте мой файл так:

ObjectInputStream objetoInStr   = new ObjectInputStream(new FileInputStream(sPath))
{
    protected void readStreamHeader() throws IOException 
    {
    }
};

И, наконец, прочитайте мой объект так:

ClassEmployer Employer;                     

String sText="";
try
{       
    //Infinit reading
    while(true)
    {
        //that code wil have crashed with an EOFEXception
        Employer = (ClasseEmployer)objetoInStr.readObject();
        sText=sText+"Name: " + Employer.getName() + " Salary: "+ Employer.getSalary() +"\n";
    }   
}
catch(EOFException ex)
{
    objetotextoGrande.setText(sText);
}

И все это является решением. Я надеюсь, что поможет другим программистам, как я.

person Emilio López    schedule 14.03.2016