在Java中序列化和反序列化多个对象
以下是我的应用程序需要如何工作的步骤。 启动应用程序后:在Java中序列化和反序列化多个对象,java,serialization,Java,Serialization,以下是我的应用程序需要如何工作的步骤。 启动应用程序后: 它需要继续接受来自用户的字符串形式的输入 一旦我得到任何输入,我需要序列化它 之后,我需要反序列化文件中存储的所有对象,这样我就不会丢失文件中存储的先前序列化对象 如何实施?每次我只能反序列化最后出现的一个对象。下面是我用于单输入的代码。我无法将所有输入转换为单个对象,因为我的应用程序需要持续运行一整天,并且它必须随时接受输入 用于序列化的代码 import java.io.FileOutputStream; import java.io
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Scanner;
public class Dummyserial implements Serializable {
/**
* @param args
*/
String input;
public void work()
{ System.out.println("give an input");
Scanner user_input = new Scanner( System.in );
input=user_input.next( );
}
public static char sa='n';
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("pree Y to continue or N to exit");
Scanner flag= new Scanner(System.in);
sa=flag.next().charAt(0);
if (sa=='y'){
Dummyserial obj=new Dummyserial();
try{
FileOutputStream fileOut =new FileOutputStream("C:/Workouts/DummyStrng.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
obj.work();
out.writeObject(obj);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in C:/Workouts/Strng.ser");
}
catch(IOException i)
{
i.printStackTrace();
}
}}
}
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
public class DummyDeserial {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Dummyserial obj=null;
try
{
FileInputStream fileIn = new FileInputStream("C:/Workouts/DummyStrng.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
obj = (Dummyserial) in.readObject();
in.close();
fileIn.close();
}catch(IOException i)
{
i.printStackTrace();
return;
}catch(ClassNotFoundException c)
{
System.out.println("Employee class not found");
c.printStackTrace();
return;
}
System.out.printf("%s",obj.input);
System.out.println();
}
}
反序列化代码
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Scanner;
public class Dummyserial implements Serializable {
/**
* @param args
*/
String input;
public void work()
{ System.out.println("give an input");
Scanner user_input = new Scanner( System.in );
input=user_input.next( );
}
public static char sa='n';
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("pree Y to continue or N to exit");
Scanner flag= new Scanner(System.in);
sa=flag.next().charAt(0);
if (sa=='y'){
Dummyserial obj=new Dummyserial();
try{
FileOutputStream fileOut =new FileOutputStream("C:/Workouts/DummyStrng.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
obj.work();
out.writeObject(obj);
out.close();
fileOut.close();
System.out.printf("Serialized data is saved in C:/Workouts/Strng.ser");
}
catch(IOException i)
{
i.printStackTrace();
}
}}
}
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
public class DummyDeserial {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Dummyserial obj=null;
try
{
FileInputStream fileIn = new FileInputStream("C:/Workouts/DummyStrng.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
obj = (Dummyserial) in.readObject();
in.close();
fileIn.close();
}catch(IOException i)
{
i.printStackTrace();
return;
}catch(ClassNotFoundException c)
{
System.out.println("Employee class not found");
c.printStackTrace();
return;
}
System.out.printf("%s",obj.input);
System.out.println();
}
}
因此,您需要附加到该文件。您正在覆盖它。或者,将对象保存在列表中并一次写入文件。@但是我想一个接一个地处理我的输入。我不希望我的输入一次全部存储在列表中。如果不覆盖以前的对象,管理是不可能的。只需在程序的生命周期内保持
FileOutputStream
和ObjectOutputStream
打开即可,而不是为每个要序列化的对象创建新对象@ScaryWombat在不采取特殊措施的情况下,您不能仅仅附加到序列化对象的文件中。