搜尋

首頁  >  問答  >  主體

關於Java中的序列化與反序列化

1.如下程式碼,將檔案2.log序列化後儲存到2.txt

#
    FileInputStream fin = new FileInputStream("D:\2.log");

    FileOutputStream out1 = new FileOutputStream(new File("D:\2.txt"));

    // ObjectOutputStream oop1 = new ObjectOutputStream(out1);

    byte[] datas = new byte[1024];

    int j = 0;

    while ((j = fin.read(datas)) > 0) {

        out1.write(datas);

        fin.read(datas);

    }

    fin.close();
    out1.close();

反序列化:
使用ObjectInputStream()
FileInputStream fis = new FileInputStream("D:/2.txt");
ObjectInputStream oin = new ObjectInputStream(fis);
oin. readObject();
錯誤:Exception in thread "main" java.io.StreamCorruptedException: invalid stream header: 3139322E
該怎麼處理?
如果檔案較大,讀入時加入快取該怎麼寫?望大牛賜教,xiexie

PHP中文网PHP中文网2738 天前963

全部回覆(1)我來回復

  • 漂亮男人

    漂亮男人2017-05-27 17:43:47

    你這個問題是因為ObjectInputStream讀出的內容必須是ObjectOutputStream寫入產生的。文件內容必須符合java序列化的規格要求。你自己創建的byte數組是不能用的。


    protobuf是用來結構化資料串列化的靈活、高效、自動的方法,有如XML,不過它更小、更快、也更簡單。你可以定義自己的資料結構,然後使用程式碼產生器產生的程式碼來讀寫這個資料結構。你甚至可以在無需重新部署程式的情況下更新資料結構。

    無論是大小還是序列化和反序列化效率,基本上都是前列,比JAVA自帶的序列化強不知道幾倍,數據越大,優勢越明顯,缺點就是操作起來略微有點麻煩

    回覆
    0
  • 取消回覆