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
你這個問題是因為ObjectInputStream讀出的內容必須是ObjectOutputStream寫入產生的。文件內容必須符合java序列化的規格要求。你自己創建的byte數組是不能用的。
protobuf是用來結構化資料串列化的靈活、高效、自動的方法,有如XML,不過它更小、更快、也更簡單。你可以定義自己的資料結構,然後使用程式碼產生器產生的程式碼來讀寫這個資料結構。你甚至可以在無需重新部署程式的情況下更新資料結構。
無論是大小還是序列化和反序列化效率,基本上都是前列,比JAVA自帶的序列化強不知道幾倍,數據越大,優勢越明顯,缺點就是操作起來略微有點麻煩