Über Serialisierung und Deserialisierung in Java
PHP中文网
PHP中文网 2017-05-27 17:41:47
0
1
978

1. Der folgende Code serialisiert die Datei 2.log und speichert sie in 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();

Deserialisierung:
Use ObjectInputStream()
FileInputStream fis = new FileInputStream("D:/2.txt");
ObjectInputStream oin = new ObjectInputStream(fis);
oin.readObject();
Error: Ausnahme im Thread „main " java.io.StreamCorruptedException: ungültiger Stream-Header: 3139322E
Wie gehe ich damit um?
Wie füge ich beim Lesen einen Cache hinzu, wenn die Datei groß ist? Ich hoffe, Daniel kann mich aufklären, xiexie

PHP中文网
PHP中文网

认证0级讲师

Antworte allen(1)
漂亮男人

你这个问题是因为ObjectInputStream读出的内容必须是ObjectOutputStream写入生成的。文件内容必须符合java序列化的规范要求。你自己创建的byte数组是不能用的。


protobuf是用于结构化数据串行化的灵活、高效、自动的方法,有如XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。

无论是大小还是序列化和反序列化效率,基本都是前列,比JAVA自带的序列化强不知道几倍,数据越大,优势越明显,缺点就是操作起来略微有点麻烦

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage