如何使用缓冲区来读写java对象

时间:2013-06-19 13:20:19

标签: java

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

        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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

您使用的对象e1必须是序列化类。

这是唯一的标准。

答案 2 :(得分:0)

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

答案 3 :(得分: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;
    }

}