JavaRush /Blog Jawa /Random-JV /Nanggepi artikel "Napa nggunakake SerialVersionUID ing ke...
Сергей
tingkat
Киев

Nanggepi artikel "Napa nggunakake SerialVersionUID ing kelas Serializable ing Jawa"

Diterbitake ing grup
Dadi .. Kita duwe kelas sing arep kita serialize nggunakake cara conventional (kita nggunakake Serializable) Nanggepi artikel "Napa nggunakake SerialVersionUID ing kelas Serializable ing Jawa" - 1
package Serialization;

import java.io.Serializable;

public class SerializableClass implements Serializable {
    private String name;
    private int number;
 }
Kita nulis aplikasi tes. Aku bakal langsung ngomong yen tujuanku yaiku nuduhake apa serialVersionUID.
package Serialization;

import java.io.*;

public class MainSerializable {
    final static String FILE_NAME = "c:\\File.dat";

    public static void serialize(Object object) throws IOException {
        FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);

        objectOutputStream.writeObject(object);

        fileOutputStream.close();
        objectOutputStream.close();
    }

    public static Object deserialize() throws IOException, ClassNotFoundException {
        FileInputStream fileInputStream = new FileInputStream(FILE_NAME);
        ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

        Object object = objectInputStream.readObject();

        objectInputStream.close();

        return object;
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        SerializableClass serializableClass = new SerializableClass();

        serialize(serializableClass);

        SerializableClass newObject = (SerializableClass) deserialize();
    }
}
Kabeh kerjane apik. Kelas kasebut serialized menyang file FILE_NAME = "c:\\File.dat". Wis peteng ndhedhet... :) Kelalen nambahi kolom ing kelas. Tambah:
public class SerializableClass implements Serializable {
    private String name;
    private int number;
    private String FirstName;   // +
    private String LastName;    // +
 }
Kabeh katon apik.. kabeh dikompilasi.. Dadi kita mbukak main, deserialize kelas SerializableClasssaka file " c:\\File.dat":
public static void main(String[] args) throws IOException, ClassNotFoundException {
    SerializableClass newObject = (SerializableClass) deserialize();
}
Oh ... Apa sing kudu dilakoni ...
Exception in thread "main" java.io.InvalidClassException: Serialization.SerializableClass; local class incompatible: stream classdesc serialVersionUID = 8129437039424566964, local class serialVersionUID = -8271479231760195917
	at java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:689)
	at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1903)
	at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1772)
	at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2060)
	at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1594)
	at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:430)
	at Serialization.MainSerializable.deserialize(MainSerializable.java:22)
	at Serialization.MainSerializable.main(MainSerializable.java:30)
Umumé, kabeh iku adil. Kelas wis diganti lan sawijining serialVersionUID= -8271479231760195917, lan serialized ing file serialVersionUID= 8129437039424566964. Apa sing kudu ditindakake saiki, apa sing kudu ditindakake? Kepiye carane nggawe conto? Ana metu. We kudu wara-wara ing kelas kita: static final long serialVersionUID, kang padha karo serialVersionUIDgrayed metu :) kelas ing file. Sing. kita ngomong, terus, aku bakal deserialize .. sampeyan bisa .. versi sampeyan padha:
package Serialization;

import java.io.Serializable;

public class SerializableClass implements Serializable {
    static final long serialVersionUID = 8129437039424566964L;

    private String name;
    private int number;
    private String FirstName;   // +
    private String LastName;    // +
}
Kita miwiti ... Lan .. Kabeh bisa. Kaya sing dakngerteni, kesalahan iki bisa dihindari yen kelas kasebut wis ngumumake sadurunge:
public class SerializableClass implements Serializable {
    static final long serialVersionUID = 1L;

    private String name;
    private int number;
}
Sing. kita ora ngidini Jawa nindakake petungan dhewe serialVersionUIDadhedhasar algoritma (algoritma cukup rumit). Saiki, saben kelas ganti, kita serialVersionUID = 1L mriksa:
public static void main(String[] args) throws IOException, ClassNotFoundException {
    SerializableClass serializableClass = new SerializableClass();

    serialize(serializableClass);

    SerializableClass newObject = (SerializableClass) deserialize();
}
Kerjane .. Lan saiki kaya iki:
public class SerializableClass implements Serializable {
    static final long serialVersionUID = 1L;

    //private String name;
    //private int number;
}
Ya.. Terus?
public class SerializableClass implements Serializable {
    static final long serialVersionUID = 1L;
    public int A;
    protected String value;
    //private String name;
    //private int number;
}
Kelangan.. kabeh terus bisa. Dadi aku rampung artikel pisanan. Aku pengin sijine kabeh iki ing komentar, nanging aku ora bisa njaluk liwat simbol. Aku bakal nampa kritik lan komentar sing sober PS Matur nuwun kanggo penulis sing menehi inspirasi kanggo nindakake kesenengan iki.. Mbokmenawa, iki carane sinau :) Good luck kanggo kabeh :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION