序列化类

时间:2017-07-21 11:08:19

标签: java serialization

序列化时遇到问题:

const arr = [['1','2','3'],['1','2']];
const newArr = arr.reduce((init,next) => {
   return init = [...init,...next];
},[]);
console.log('arr:',arr);
console.log('newArray:',newArr);

如果我在从主类调用mainMenu之前使用相同的方法,它可以正常工作,但是当我把它们放在一个类中并从我的main方法调用它时它不会序列化。 (首先进行dezerialization,然后在mainMenu方法结束后进行序列化)。

主要课程:

import java.io.*;
import java.util.*;

public class SerializationSjow implements Serializable{

    public void serialization(Library library){
        try{
            FileOutputStream fileOut = new FileOutputStream("Test.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(library);
            out.close();
            fileOut.close();
        } catch(Exception i) {
            System.out.println(i);
        }
    }

    public void deserialization(Library library){
        try{
            FileInputStream fileIn = new FileInputStream("Test.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            library = (Library) in.readObject();
            in.close();
            fileIn.close();
        } catch(Exception i){
            System.out.println(i);
        }
    }

}

1 个答案:

答案 0 :(得分:1)

Java 按值传递!这意味着传递给方法的变量按值传递,如果在方法中更改了变量本身,则不会反映在方法之外。

示例:

private static void increment(int arg) {
    arg = arg + 1;
    System.out.println("incremented: " + arg);
}

public static void main(String[] args) {
    int value = 1;
    System.out.println("before: " + value);
    increment(value);
    System.out.println("after: " + value);
}

应该打印

before: 1
incremented: 2
after: 1

main我们可以看到该值未发生变化......

解决方案:更改deserialization方法以返回Library,而不是使用参数:

public Library deserialization() { // no parameter
    Library library;
    :
    library = ...
    :
    return library;  // null on error? or better throw an Exception
}

Obs:SerializationSjow无需实施Serializable - 它没有被序列化,而Library必须实现它。