Сериализация и статические переменные - PullRequest
0 голосов
/ 23 ноября 2018

Я прочитал несколько статей о сериализации / десериализации, но все еще не могу понять, что происходит со статическими переменными во время этих процессов. здесь есть статья, и она предоставляет пример кода, который я переписываю здесь:

// Java code for serialization and deserialization 
// of a Java object 
import java.io.*; 

class Emp implements Serializable { 
private static final long serialversionUID = 129348938L; 
    transient int a; 
    static int b; 
    String name; 
    int age; 

    // Default constructor 
public Emp(String name, int age, int a, int b) 
    { 
        this.name = name; 
        this.age = age; 
        this.a = a; 
        this.b = b; 
    } 

} 

public class SerialExample { 
public static void printdata(Emp object1) 
    { 
        System.out.println("name = " + object1.name); 
        System.out.println("age = " + object1.age); 
        System.out.println("a = " + object1.a); 
        System.out.println("b = " + object1.b); 
    } 

public static void main(String[] args) 
    { 
        Emp object = new Emp("ab", 20, 2, 1000); 
        String filename = "shubham.txt"; 

        // Serialization 
        try { 

            // Saving of object in a file 
            FileOutputStream file = new FileOutputStream (filename); 
            ObjectOutputStream out = new ObjectOutputStream (file); 

            // Method for serialization of object 
            out.writeObject(object); 

            out.close(); 
            file.close(); 

            System.out.println("Object has been serialized\n"
                            + "Data before Deserialization."); 
            printdata(object); 

            // value of static variable changed 
            object.b = 2000; 
        } 

        catch (IOException ex) { 
            System.out.println("IOException is caught"); 
        } 

        object = null;

        // Deserialization 
        try { 

            // Reading the object from a file 
            FileInputStream file = new FileInputStream (filename); 
            ObjectInputStream in = new ObjectInputStream (file); 

            // Method for deserialization of object 
            object = (Emp)in.readObject(); 

            in.close(); 
            file.close(); 
            System.out.println("Object has been deserialized\n"
                                + "Data after Deserialization."); 
            printdata(object); 

            // System.out.println("z = " + object1.z); 
        } 

        catch (IOException ex) { 
            System.out.println("IOException is caught"); 
        } 

        catch (ClassNotFoundException ex) { 
            System.out.println("ClassNotFoundException is caught"); 
        } 
    } 
}

и вывод:

Object has been serialized
Data before Deserialization.
name = ab
age = 20
a = 2
b = 1000
Object has been deserialized
Data after Deserialization.
name = ab
age = 20
a = 0
b = 2000

в двух словах, мысоздали объект Emp, мы записали его в файл, затем закрыли ObjectOutputStream и FileOutputStream и ПОСЛЕ ЗАКРЫТИЯ OUTPUTSTREAMS изменили значение статической переменной b, а затем установили OBJECT = NULL ,но когда мы читаем из файла в процессе десериализации, b имеет значение, которое мы присвоили ему после записи в файл!я имею в виду, что выходные потоки были закрыты, и исходный объект также был установлен в нуль, так как может быть возможно, чтобы изменения, которые мы применяем к b, сохранялись либо в файловых, либо даже в программных полях?!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...