java字典序列化_Java序列化(Serialization)

关于Java的序列化的文章在网上已经够多了,在这里写关于Java序列化的文章是对自己关于这方面的的一种总结,结合以前的开发经验与网上的资料,写了这篇文章,对自己是有着巩固记忆的作用,也希望能够对大家有一定帮助。

一、什么是序列化(Serialization)?

序列化是Java提供的一种机制,将对象转化成字节序列,在字节序列中保存了对象的数据、对象的类型的信息与存储在对象中的数据的类型。序列化实际上就是将保存对象的"状态",可以方便以后的程序使用或者通过网络传输到另一台主机使用。一般来说,对象的生成周期取决于程序是否在执行,而序列化能够将对象保存在磁盘或网络中,这样对象就能生存在程序的调用之间。

二、序列化的目的

用序列化来保存对象的状态,主要是为了支持两大特性:

Java的远程方法调用(RMI),它能够存活于其他机器上的对象使用起来就像存活于本地一样。当向远程对象发送消息时,需要通过对象序列化来传输参数和返回值。

在Java Beans中,必须使用对象序列化。

三、序列化基本实例

Java中实现序列化最基本的方法是实现Serializable接口,Serializable接口是标记接口,不包含任何方法。要序列化一个对象,必须先创建某些OutoutStream对象,然后封装到ObjectOutputStream对象内,其中ObjectOutputStream提供writeObject()方法,调用该方法即可将对象序列化。

反序列化是指将对象序列化生成的字节序列还原成对象,需要将InputStream对象封装在ObjectInputStream对象中,然后调用readObject即可读出对象。

下面是对象序列化的基本实例:

class Pet implementsSerializable {

privateString name;

publicPet(String name) {

this.name =name;

}

publicString toString() {

returnname;

}

}

public class Person implementsSerializable {

private static final long serialVersionUID = 1L;

private intage;

privateString name;

privatePet ownPet;

public Person(String name, intage, Pet ownPet) {

this.name =name;

this.age =age;

this.ownPet =ownPet;

}

@Override

publicString toString() {

return "Person [age=" + age + ", name=" + name + ", ownPet=" +ownPet

+ "]";

}

public static void main(String[] args) throwsFileNotFoundException,

IOException, ClassNotFoundExcep

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`XmlSerializer`是.NET中用于XML序列和反序列的类,但它无法直接序列`Dictionary`字典对象。这是因为`Dictionary`类在.NET中不是可序列的类型。 `XmlSerializer`可以序列和反序列具有公共可读/可写属性的类和结构,以及数组和集合类型。但是,在序列过程中,它无法处理键/值对的字典结构。 要序列字典对象,你可以使用其他方法,例如将字典转换为可序列的类型,或使用其他序列库(如`DataContractSerializer`或`Json.NET`)。 如果你仍然希望使用`XmlSerializer`来序列字典,你可以考虑创建一个可序列的封装类来存储字典的键和值,并在需要时将其转换为字典。以下是一个示例代码: ```csharp using System; using System.Collections.Generic; using System.Xml.Serialization; public class SerializableDictionary<TKey, TValue> { [XmlArrayItem("Item")] public List<SerializableKeyValuePair<TKey, TValue>> Items { get; set; } public SerializableDictionary() { Items = new List<SerializableKeyValuePair<TKey, TValue>>(); } public SerializableDictionary(Dictionary<TKey, TValue> dictionary) { Items = new List<SerializableKeyValuePair<TKey, TValue>>(); foreach (var kvp in dictionary) { Items.Add(new SerializableKeyValuePair<TKey, TValue>(kvp.Key, kvp.Value)); } } public Dictionary<TKey, TValue> ToDictionary() { var dictionary = new Dictionary<TKey, TValue>(); foreach (var item in Items) { dictionary[item.Key] = item.Value; } return dictionary; } } public class SerializableKeyValuePair<TKey, TValue> { [XmlAttribute("Key")] public TKey Key { get; set; } [XmlAttribute("Value")] public TValue Value { get; set; } public SerializableKeyValuePair() { } public SerializableKeyValuePair(TKey key, TValue value) { Key = key; Value = value; } } public class Program { public static void Main() { // 创建一个字典 Dictionary<string, int> dictionary = new Dictionary<string, int>(); dictionary.Add("Apple", 1); dictionary.Add("Banana", 2); dictionary.Add("Orange", 3); // 将字典转换为可序列的类型 var serializableDictionary = new SerializableDictionary<string, int>(dictionary); // 创建XmlSerializer对象并序列字典 XmlSerializer serializer = new XmlSerializer(typeof(SerializableDictionary<string, int>)); using (var writer = new System.IO.StringWriter()) { serializer.Serialize(writer, serializableDictionary); string xml = writer.ToString(); Console.WriteLine(xml); } } } ``` 上述代码中,我们创建了一个`SerializableDictionary`类,它包含一个`Items`属性,用于存储字典的键值对。然后,我们将字典转换为`SerializableDictionary`对象,并使用`XmlSerializer`将其序列为XML字符串。 希望这个示例可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值