阅读量:142
在 Java 中,要对 Set 类型进行序列化,可以使用以下方法:
- 使用
java.util.Set接口的子类,如HashSet或LinkedHashSet。这些类已经实现了Serializable接口,可以直接进行序列化。
import java.io.*;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set mySet = new HashSet<>();
mySet.add("apple");
mySet.add("banana");
mySet.add("orange");
// 序列化
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("mySet.ser"))) {
oos.writeObject(mySet);
System.out.println("Set 已序列化到 mySet.ser 文件");
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 如果需要自定义序列化过程,可以实现
Externalizable接口。这样,你可以控制序列化和反序列化的具体实现。
import java.io.*;
import java.util.HashSet;
import java.util.Set;
public class CustomSet implements Externalizable {
private Set mySet;
public CustomSet() {
mySet = new HashSet<>();
}
public CustomSet(Set mySet) {
this.mySet = mySet;
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeInt(mySet.size());
for (String item : mySet) {
out.writeUTF(item);
}
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
int size = in.readInt();
for (int i = 0; i < size class="hljs-keyword">public static void main(String[] args) {
Set mySet = new HashSet<>();
mySet.add("apple");
mySet.add("banana");
mySet.add("orange");
// 序列化
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("mySet.ser"))) {
oos.writeObject(new CustomSet(mySet));
System.out.println("Set 已序列化到 mySet.ser 文件");
} catch (IOException e) {
e.printStackTrace();
}
// 反序列化
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("mySet.ser"))) {
CustomSet deserializedSet = (CustomSet) ois.readObject();
System.out.println("Set 已反序列化");
System.out.println("Size: " + deserializedSet.mySet.size());
System.out.println("Elements: " + deserializedSet.mySet);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
这两种方法都可以实现 Set 类型的序列化。使用 Serializable 接口的方法更简单,而实现 Externalizable 接口的方法提供了更多的自定义选项。