Sobes.tech
Middle

Роли майдони serialVersionUID дар раванди сериалӣ дар Java чист?

sobes.tech AI

Ҷавоб аз AI

serialVersionUID майдони сериаллаштирилган объектларнинг версияларини бошқариш учун ишлатилади. У JVMга сериаллаштирилган объектнинг уни десериаллаштиришга уринаётган синф билан мос келадими ёки йўқлигини аниқлашда ёрдам беради.

Объект сериаллаштирилганда, унинг serialVersionUID қиймати объект маълумотлари билан бирга сақланади. Десериаллаштириш вақтида JVM сериаллаштирилган объектнинг serialVersionUID қийматини ҳозирги classpathдаги синфнинг serialVersionUID билан солиштиради.

  • Агар улар мос келса, десериаллаштириш муваффақиятли ўтади.
  • Агар улар фарқ қилса, JVM InvalidClassException хато қўяди ва синф версияларининг мос келмаслигини кўрсатади.

Агар serialVersionUID майдони аниқ белгиланмаса, JVM уни автоматик равишда синфнинг хусусиятларига асосланиб яратади (майдон номлари, метод имзолари ва бошқалар). Автоматик яратиш, синфда кичик ўзгартиришлар (масалан, бўш конструктор қўшиш) бўлганда, автоматик яратилган serialVersionUIDни ўзгартириши мумкин, бу эса аввалги сериаллаштирилган объектларни мос келмаслигини олиб келади.

serialVersionUIDни аниқ белгилаш, мос келувчанликни назорат қилиш ва синфдаги ўзгартиришлар қайтмаслиги ҳолатларида эски объектларни десериализация қилиш имкониятини сақлашга имкон беради.

Тавсиялар:

  • Ҳар доим Serializable синфлар учун serialVersionUIDни аниқ белгилаш.
  • Мос келмайдиган ўзгартиришлар киритилганда (майдонни ўчириш ёки турини ўзгартириш каби), serialVersionUIDни янгилаш.
  • Бошланғич қийматни яратиш ёки ҳозирги serialVersionUIDни текшириш учун serialver асбобидан фойдаланинг.
import java.io.Serializable;

public class MyClass implements Serializable {

    private static final long serialVersionUID = 1L; // Аниқ белгиланган

    private String name;
    private int version;

    // Конструкторлар, геттерлар, сеттерлар ва бошқалар.
}