gpt4 book ai didi

java - 序列化类

转载 作者:行者123 更新时间:2023-12-02 12:32:27 27 4
gpt4 key购买 nike

我在序列化时遇到问题:

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);
}
}

}

如果我在从主类调用 mainMenu 之前放入相同的方法,效果很好,但是当我将它们放入类中并从主方法调用它们时,它不会序列化。 (我的 mainMenu 方法结束后首先进行反序列化,然后进行序列化)。

主类:

public class Main {
public static void main(String args[]) {
Library library = new Library();
SerializationSjow seri = new SerializationSjow();

seri.deserialization(library);
library.loginMenu();
seri.serialization(library);
}
}

最佳答案

Java 是按值传递!这意味着传递给方法的变量是按值传递的,并且如果变量本身在方法中发生更改,则不会反射(reflect)在方法外部。

示例:

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中我们可以看到该值没有改变...

解决方案:更改您的反序列化方法以返回Library而不是使用参数:

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

观察:SerializationSjow 不需要实现 Serialized - 它没有被序列化,Library 必须实现它。

关于java - 序列化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45236138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com