序列化时遇到问题:
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);
}
}
}
答案 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
必须实现它。