1

我需要将对象写入和读取文件。我如何使用缓冲区来做到这一点?当我这样使用它时,它只会将最后一个对象写入文件。

        OutputStream file = new FileOutputStream(DRB );
        OutputStream buffer = new BufferedOutputStream( file );
        ObjectOutput out = new ObjectOutputStream( buffer );

        try{
            out.writeObject(e1);
          }
          finally
          {
            buffer.flush();
            out.close();
          }
4

4 回答 4

3

在我看来,要附加到 ObjectOutputStream 只有两个选项

  • 将所有数据读入列表,添加项目并写入所有对象。ObjectStream 是单个连续流。它不像文本,您可以继续添加到末尾。
  • 使用您自己的格式将多个独立的流写入同一个文件。您可以写入 ByteArrayOutputStream,并在写入内容之前使用它来写入流的长度。通过这种方式,您可以重新读取单个流。如果您对处理二进制文件有信心,我只会这样做。
于 2013-06-19T13:35:10.057 回答
0

The object you used e1 must be serialized class.

That's the only criteria.

于 2013-06-19T13:25:53.553 回答
0

您可以拥有要编写的对象列表。然后,您可以编写此列表。

于 2013-06-19T13:27:24.247 回答
0

请参阅下面给出的代码。希望这能解决您的问题:

package com.shineed.io;

import java.io.FileInputStream;

import java.io.ObjectInputStream;

import java.io.Serializable;

public class Deserializer{

   public static void main (String args[]) {

       Deserializer deserializer = new Deserializer();

       Customer customer = deserializer.deserialzeCustomer();

       System.out.println(customer);
   }

   public Customer deserialzeCustomer(){

       Customer customer;

       try{

           FileInputStream fin = new FileInputStream("c:\\customer.txt");
           ObjectInputStream ois = new ObjectInputStream(fin);
           customer = (Customer) ois.readObject();
           ois.close();

           return customer;

       }catch(Exception e){
           e.printStackTrace();
           return null;
       } 
   } 
}

另请参阅下面给出的 Customer 类:

package com.shineed.io;

import java.io.Serializable;

public class Customer implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String name;
    private String adress;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAdress() {
        return adress;
    }
    public void setAdress(String adress) {
        this.adress = adress;
    }

}
于 2013-06-19T13:58:15.260 回答