我们可以 read/write 同一父 class 的不同类型子 class 到一个文本文件吗?
Can we read/write different type child classes of the same parent class to a textfile?
假设我有一个抽象 class“车辆”和另外 2 个继承自车辆 class 的子 classes,称为“汽车”和“自行车”。
所以我可以随机创建一系列汽车和自行车对象:
Vehicle car = new Car();
Vehicle bike = new Bike();
并将它们全部添加到一个数组列表中:
Arraylist<Vehicle> vehicles = new Arraylist<>();
是否可以将这些对象写入单个文本文件,并根据特定对象类型(汽车、自行车)将其从文本文件读回 Arraylist,而无需为每种类型维护不同的文本文件
是的,
如果抽象 class 实现了可序列化接口,您实际上也可以序列化子 classes。
因此,通过使车辆 class 可序列化,您可以遍历数组列表并使用 ObjectOutputStream
和 FileOutputStream
序列化子对象。
参考:https://www.geeksforgeeks.org/object-serialization-inheritance-java/
如果你想在文件中存储对象,我建议你使用对象序列化。 This link 包含有关如何序列化和反序列化列表的有用详细信息
这是序列化列表的方式:
ArrayList<Vehicle> vehicles= new ArrayList<>();
vehicles.add(new Vehicle());
vehicles.add(new Bike());
vehicles.add(new Car());
try
{
FileOutputStream fos = new FileOutputStream("vehiclesData");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(vehicles);
oos.close();
fos.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
要反序列化,请使用以下内容:
ArrayList<Vehicle> vehicles= new ArrayList<>();
try
{
FileInputStream fis = new FileInputStream("vehiclesData");
ObjectInputStream ois = new ObjectInputStream(fis);
vehicles= (ArrayList) ois.readObject();
ois.close();
fis.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
return;
}
catch (ClassNotFoundException c)
{
System.out.println("Class not found");
c.printStackTrace();
return;
}
//Verify list data
for (Vehicle vehicle : vehicles) {
System.out.println(vehicle);
}
确保你所有的类实现serializable
接口
假设我有一个抽象 class“车辆”和另外 2 个继承自车辆 class 的子 classes,称为“汽车”和“自行车”。
所以我可以随机创建一系列汽车和自行车对象:
Vehicle car = new Car();
Vehicle bike = new Bike();
并将它们全部添加到一个数组列表中:
Arraylist<Vehicle> vehicles = new Arraylist<>();
是否可以将这些对象写入单个文本文件,并根据特定对象类型(汽车、自行车)将其从文本文件读回 Arraylist,而无需为每种类型维护不同的文本文件
是的,
如果抽象 class 实现了可序列化接口,您实际上也可以序列化子 classes。
因此,通过使车辆 class 可序列化,您可以遍历数组列表并使用 ObjectOutputStream
和 FileOutputStream
序列化子对象。
参考:https://www.geeksforgeeks.org/object-serialization-inheritance-java/
如果你想在文件中存储对象,我建议你使用对象序列化。 This link 包含有关如何序列化和反序列化列表的有用详细信息
这是序列化列表的方式:
ArrayList<Vehicle> vehicles= new ArrayList<>();
vehicles.add(new Vehicle());
vehicles.add(new Bike());
vehicles.add(new Car());
try
{
FileOutputStream fos = new FileOutputStream("vehiclesData");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(vehicles);
oos.close();
fos.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
要反序列化,请使用以下内容:
ArrayList<Vehicle> vehicles= new ArrayList<>();
try
{
FileInputStream fis = new FileInputStream("vehiclesData");
ObjectInputStream ois = new ObjectInputStream(fis);
vehicles= (ArrayList) ois.readObject();
ois.close();
fis.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
return;
}
catch (ClassNotFoundException c)
{
System.out.println("Class not found");
c.printStackTrace();
return;
}
//Verify list data
for (Vehicle vehicle : vehicles) {
System.out.println(vehicle);
}
确保你所有的类实现serializable
接口