如何在Java中序列化 HashMap?
序列化是我们将对象转换为字节流并将这些字节存储在文件系统/数据库中或将它们放在网络上以从一个位置移动到另一个位置的过程。
反序列化是序列化的逆过程。反序列化包括从字节流中检索对象。
Hashmap : HashMap 以键/值对的形式存储项目,我们可以通过另一种类型的索引(例如字符串)访问它们。
现在要序列化任何东西,你必须实现Java.io.Serializable 接口,HashMap 也实现了 Serializable 接口。然后在序列化 HashMap 之后,我们将学习如何在Java中反序列化 hashmap。
示例 1:序列化字符串键和字符串值的 HashMap
在这个例子中,我们正在序列化 HashMap,其中键和值是字符串。我们使用 ObjectOutputStream 的writeObject()方法来序列化Java中的 HashMap。在下面的程序中,我们将 hashmap 内容保存在一个序列化的newHashMap文件中。运行以下代码后,将创建一个newHashMap文件。该文件用于在下一个即将推出的程序中进行反序列化。
Java
// Java program on how to Serialize HashMap in Java
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.HashMap;
public class HashMapExample1 {
public static void main(String[] args)
{
HashMap foodType = new HashMap<>();
// storing data in HashMap
foodType.put("Burger", "Fastfood");
foodType.put("Cherries", "Fruit");
foodType.put("Fish", "Seafood");
foodType.put("Spinach", "Vegetables");
foodType.put("Chicken", "Protein-Rich");
// try catch block
try {
FileOutputStream myFileOutStream
= new FileOutputStream(
"/Users/piyushkumar/Downloads/Java/newHashMap.txt");
ObjectOutputStream myObjectOutStream
= new ObjectOutputStream(myFileOutStream);
myObjectOutStream.writeObject(foodType);
// closing FileOutputStream and
// ObjectOutputStream
myObjectOutStream.close();
myFileOutStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
Java
// Deserializing HashMap in Java
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapExample2 {
public static void main(String[] args)
{
HashMap newHashMap = null;
try {
FileInputStream fileInput = new FileInputStream(
"/Users/piyushkumar/Downloads/Java/newHashMap.txt");
ObjectInputStream objectInput
= new ObjectInputStream(fileInput);
newHashMap = (HashMap)objectInput.readObject();
objectInput.close();
fileInput.close();
}
catch (IOException obj1) {
obj1.printStackTrace();
return;
}
catch (ClassNotFoundException obj2) {
System.out.println("Class not found");
obj2.printStackTrace();
return;
}
System.out.println("Deserializing HashMap..");
// Displaying content in "newHashMap.txt" using
// Iterator
Set set = newHashMap.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry)iterator.next();
System.out.print("key : " + entry.getKey()
+ " & Value : ");
System.out.println(entry.getValue());
}
}
}
}
输出
在上面的例子中,我们使用 writeObject() 方法序列化了 foodType 的 HashMap。
运行这个程序,并在你的文件系统中看到一个名为“newHashMap.txt”的文件被创建,整个 HashMap(以编码形式)被保存。现在,我们将学习如何读取此文件并反序列化 HashMap。
示例 2:反序列化字符串键和值的 HashMap
需要注意的是,我们只能将反序列化的 HashMap 存储到 HashMap 或其任何父类的引用变量中。除此之外会发生Java.lang.ClassCastException异常。
Java
// Deserializing HashMap in Java
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapExample2 {
public static void main(String[] args)
{
HashMap newHashMap = null;
try {
FileInputStream fileInput = new FileInputStream(
"/Users/piyushkumar/Downloads/Java/newHashMap.txt");
ObjectInputStream objectInput
= new ObjectInputStream(fileInput);
newHashMap = (HashMap)objectInput.readObject();
objectInput.close();
fileInput.close();
}
catch (IOException obj1) {
obj1.printStackTrace();
return;
}
catch (ClassNotFoundException obj2) {
System.out.println("Class not found");
obj2.printStackTrace();
return;
}
System.out.println("Deserializing HashMap..");
// Displaying content in "newHashMap.txt" using
// Iterator
Set set = newHashMap.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry)iterator.next();
System.out.print("key : " + entry.getKey()
+ " & Value : ");
System.out.println(entry.getValue());
}
}
}
}
输出