、定义一个访客类,属性有ID、时间。该类可以序列化。创建5个访客对象放在数组中,将对象放在object.dat文件中。并从文件中读出5个对象显示到屏幕上
import java.io.Serializable;
public class Visitor implements Serializable {
private int ID;
private String time;
public Visitor(int ID, String time) {
this.ID = ID;
this.time = time;
}
public int getID() {
return ID;
}
public String getTime() {
return time;
}
}
import java.io.*;
public class Main {
public static void main(String[] args) {
Visitor[] visitors = new Visitor[5];
visitors[0] = new Visitor(1, "09:00");
visitors[1] = new Visitor(2, "10:30");
visitors[2] = new Visitor(3, "12:15");
visitors[3] = new Visitor(4, "14:45");
visitors[4] = new Visitor(5, "16:20");
try {
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("object.dat"));
outputStream.writeObject(visitors);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
import java.io.*;
public class Main {
public static void main(String[] args) {
try {
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("object.dat"));
Visitor[] visitors = (Visitor[]) inputStream.readObject();
for (Visitor visitor : visitors) {
System.out.println("Visitor ID: " + visitor.getID());
System.out.println("Time: " + visitor.getTime());
System.out.println("-----------------------");
}
inputStream.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Python实现
import pickle
class Visitor:
def __init__(self, id, time):
self.id = id
self.time = time
def __str__(self):
return f"ID: {self.id}, Time: {self.time}"
# 创建5个访客对象
visitors = [
Visitor(1, "2022-01-01 10:00:00"),
Visitor(2, "2022-01-01 11:00:00"),
Visitor(3, "2022-01-01 12:00:00"),
Visitor(4, "2022-01-01 13:00:00"),
Visitor(5, "2022-01-01 14:00:00")
]
# 将对象序列化并保存到文件中
with open("object.dat", "wb") as f:
for visitor in visitors:
pickle.dump(visitor, f)
# 从文件中读取对象并显示到屏幕上
with open("object.dat", "rb") as f:
for i in range(5):
visitor = pickle.load(f)
print(visitor)
首先定义了一个访客类Visitor,包含属性ID和time,以及一个__str__方法用于返回对象的字符串表示。然后创建了5个访客对象,将它们序列化并保存到文件object.dat中。最后从文件中读取对象并显示到屏幕上。
Java实现
import java.io.*;
class Visitor implements Serializable {
private int id;
private String time;
public Visitor(int id, String time) {
this.id = id;
this.time = time;
}
public String toString() {
return "ID: " + id + ", Time: " + time;
}
}
public class Main {
public static void main(String[] args) {
// 创建5个访客对象
Visitor[] visitors = {
new Visitor(1, "2022-01-01 10:00:00"),
new Visitor(2, "2022-01-01 11:00:00"),
new Visitor(3, "2022-01-01 12:00:00"),
new Visitor(4, "2022-01-01 13:00:00"),
new Visitor(5, "2022-01-01 14:00:00")
};
// 将对象序列化并保存到文件中
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("object.dat"))) {
for (Visitor visitor : visitors) {
oos.writeObject(visitor);
}
} catch (IOException e) {
e.printStackTrace();
}
// 从文件中读取对象并显示到屏幕上
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object.dat"))) {
for (int i = 0; i < 5; i++) {
Visitor visitor = (Visitor) ois.readObject();
System.out.println(visitor);
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
首先定义了一个访客类Visitor,实现了Serializable接口,以便对象可以序列化。然后创建了5个访客对象,将它们序列化并保存到文件object.dat中。最后从文件中读取对象并显示到屏幕上。注意在try-with-resources语句中使用ObjectOutputStream和ObjectInputStream来序列化和反序列化对象。
C++实现
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Visitor {
public:
Visitor(int id, const string& time) : id(id), time(time) {}
string toString() const {
return "ID: " + to_string(id) + ", Time: " + time;
}
private:
int id;
string time;
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version) {
ar & id;
ar & time;
}
};
int main() {
// 创建5个访客对象
Visitor visitors[] = {
Visitor(1, "2022-01-01 10:00:00"),
Visitor(2, "2022-01-01 11:00:00"),
Visitor(3, "2022-01-01 12:00:00"),
Visitor(4, "2022-01-01 13:00:00"),
Visitor(5, "2022-01-01 14:00:00")
};
// 将对象序列化并保存到文件中
ofstream ofs("object.dat", ios::binary);
boost::archive::binary_oarchive oa(ofs);
for (const auto& visitor : visitors) {
oa << visitor;
}
// 从文件中读取对象并显示到屏幕上
ifstream ifs("object.dat", ios::binary);
boost::archive::binary_iarchive ia(ifs);
for (int i = 0; i < 5; i++) {
Visitor visitor(0, "");
ia >> visitor;
cout << visitor.toString() << endl;
}
return 0;
}
首先定义了一个访客类Visitor,包含属性ID和time,以及一个toString方法用于返回对象的字符串表示。为了使类可以序列化,使用了Boost库的serialization模块,并在类中定义了serialize方法。然后创建了5个访客对象,将它们序列化并保存到文件object.dat中。最后从文件中读取对象并显示到屏幕上。注意使用了ofstream和ifstream来创建文件流,以及boost::archive::binary_oarchive和boost::archive::binary_iarchive来序列化和反序列化对象。
如有帮助望采纳!
不知道你这个问题是否已经解决, 如果还没有解决的话:讨论与参考答案:
第48题