簡體   English   中英

如何使用緩沖區讀取和寫入Java對象

[英]how to use buffer to read and write java objects

我需要寫入和讀取對象到文件。 我如何使用緩沖區? 當我那樣使用它時,它只會將最后一個對象寫入文件。

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

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

要追加到ObjectOutputStream,只有兩個選項,如我所見

  • 將所有數據讀取到列表中,添加項目並寫入所有對象。 ObjectStream是單個連續流。 它不像文本,您可以繼續添加到末尾。
  • 使用您自己的格式將多個獨立的流寫入同一文件。 您可以寫入ByteArrayOutputStream,並在寫入內容之前使用它來寫入流的長度。 這樣,您可以讀回單個流。只有在您有信心處理二進制文件時,我才這樣做。

您使用的e1對象必須是序列化的類。

那是唯一的標准。

您可以具有要編寫的對象列表。 然后,您可以編寫此列表。

請參見下面的代碼。 希望這能解決您的問題:

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM