Java ObjectInputStream/ObjectOutputStream:读取/写入附加对象时出错

Java ObjectInputStream/ObjectOutputStream:读取/写入附加对象时出错,java,objectinputstream,objectoutputstream,Java,Objectinputstream,Objectoutputstream,我正在用那个代码附加对象 import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStream; public class ClaseAppendObjectStream extends ObjectOutputStream { public ClaseAppendObjectStream(OutputStream os) throws IOException

我正在用那个代码附加对象

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方法将其正确写入我的文件,但是当我使用带有“objectinputStream”的“readObject()”时

更多信息: 我使用了“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) 
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);
}

我发现我的owm有误解。我是一名读者,他在询问堆栈溢出的其他问题和答案

首先,我使用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();
     } 

 }
这样读我的文件:

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) 
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);
}
最后像这样读我的作品:

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) 
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);
}

所有这些都是解决方案。我希望能帮助像我这样的程序员。

我发现我的owm存在误解。我是一名读者,他在询问堆栈溢出的其他问题和答案

首先,我使用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();
     } 

 }
这样读我的文件:

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) 
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);
}
最后像这样读我的作品:

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) 
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);
}
所有这些都是解决方案。我希望能帮助像我这样的程序员