原文: https://beginnersbook.com/2013/12/how-to-serialize-hashmap-in-java/

HashMap类默认是序列化的,这意味着我们不需要实现Serializable接口,以使其符合序列化的条件。在本教程中,我们将学习如何编写HashMap对象及其内容到文件如何从文件中读取HashMap对象。在分享完整代码之前,让我简单介绍一下序列化和反序列化。

序列化:这是一个将Object与其属性和内容一起写入文件的过程。它在内部以字节流转换对象。

反序列化:这是一个从文件中读取Object及其属性以及Object内容的过程。

示例:

HashMap的序列化:在下面的类中,我们将HashMap内容存储在hashmap.ser序列化文件中。运行以下代码后,它将生成一个hashmap.ser文件。此文件将在下一个类中用于反序列化。

  1. package beginnersbook.com;
  2. import java.io.*;
  3. import java.util.HashMap;
  4. public class Details
  5. {
  6. public static void main(String [] args)
  7. {
  8. HashMap<Integer, String> hmap = new HashMap<Integer, String>();
  9. //Adding elements to HashMap
  10. hmap.put(11, "AB");
  11. hmap.put(2, "CD");
  12. hmap.put(33, "EF");
  13. hmap.put(9, "GH");
  14. hmap.put(3, "IJ");
  15. try
  16. {
  17. FileOutputStream fos =
  18. new FileOutputStream("hashmap.ser");
  19. ObjectOutputStream oos = new ObjectOutputStream(fos);
  20. oos.writeObject(hmap);
  21. oos.close();
  22. fos.close();
  23. System.out.printf("Serialized HashMap data is saved in hashmap.ser");
  24. }catch(IOException ioe)
  25. {
  26. ioe.printStackTrace();
  27. }
  28. }
  29. }

输出:

  1. Serialized HashMap data is saved in hashmap.ser

反序列化:这里我们正在重现HashMap对象,它是我们通过运行上面的代码创建的序列化文件的内容。

  1. package beginnersbook.com;
  2. import java.io.*;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Iterator;
  6. import java.util.Set;
  7. public class Student
  8. {
  9. public static void main(String [] args)
  10. {
  11. HashMap<Integer, String> map = null;
  12. try
  13. {
  14. FileInputStream fis = new FileInputStream("hashmap.ser");
  15. ObjectInputStream ois = new ObjectInputStream(fis);
  16. map = (HashMap) ois.readObject();
  17. ois.close();
  18. fis.close();
  19. }catch(IOException ioe)
  20. {
  21. ioe.printStackTrace();
  22. return;
  23. }catch(ClassNotFoundException c)
  24. {
  25. System.out.println("Class not found");
  26. c.printStackTrace();
  27. return;
  28. }
  29. System.out.println("Deserialized HashMap..");
  30. // Display content using Iterator
  31. Set set = map.entrySet();
  32. Iterator iterator = set.iterator();
  33. while(iterator.hasNext()) {
  34. Map.Entry mentry = (Map.Entry)iterator.next();
  35. System.out.print("key: "+ mentry.getKey() + " & Value: ");
  36. System.out.println(mentry.getValue());
  37. }
  38. }
  39. }

输出:

  1. Deserialized HashMap..
  2. key: 9 & Value: GH
  3. key: 2 & Value: CD
  4. key: 11 & Value: AB
  5. key: 33 & Value: EF
  6. key: 3 & Value: IJ

参考: