Object*Stream

本文详细介绍了ObjectInputStream和ObjectOutputStream的作用,如何使用它们进行基本数据和对象的序列化存储及反序列化读取,并强调了支持java.io.Serializable或java.io.Externalizable接口的对象才能被操作。

转自:http://www.fengfly.com/plus/view-214055-1.html

ObjectInputStream 和 ObjectOutputStream 的作用是,对基本数据和对象进行序列化操作支持。
创建“文件输出流”对应的ObjectOutputStream对象,该ObjectOutputStream对象能提供对“基本数据或对象”的持久存储;当我们需要读取这些存储的“基本数据或对象”时,可以创建“文件输入流”对应的ObjectInputStream,进而读取出这些“基本数据或对象”。

注意: 只有支持 java.io.Serializable 或 java.io.Externalizable 接口的对象才能被ObjectInputStream/ObjectOutputStream所操作!

在C#中,将一个Stream转换成一个对象通常涉及到序列化和反序列化的过程。序列化是指将对象状态转换为可以存储或传输的形式的过程。在.NET中,可以使用多种方式来实现这一过程,最常见的是使用`BinaryFormatter`、`SoapFormatter`或`JSON.NET`(`Newtonsoft.Json`)等类库。下面我会给出使用`BinaryFormatter`和`JSON.NET`两种方式的示例: 1. 使用`BinaryFormatter`进行序列化和反序列化: ```csharp using System.IO; using System.Runtime.Serialization.Formatters.Binary; // 假设有一个Object实例 object myObject = new MyObject(); // 创建一个MemoryStream来作为存储流 MemoryStream stream = new MemoryStream(); // 创建BinaryFormatter实例 BinaryFormatter formatter = new BinaryFormatter(); // 序列化对象到流中 formatter.Serialize(stream, myObject); // 将流的指针重新定位到开始位置,准备读取 stream.Position = 0; // 反序列化流回对象 object deserializedObject = formatter.Deserialize(stream); // 关闭流 stream.Close(); ``` 2. 使用`JSON.NET`(`Newtonsoft.Json`)进行序列化和反序列化: ```csharp using Newtonsoft.Json; using System.IO; using System; // 假设有一个对象实例 MyObject myObject = new MyObject(); // 创建一个MemoryStream来作为存储流 MemoryStream stream = new MemoryStream(); // 创建StreamWriter来写入流 StreamWriter writer = new StreamWriter(stream); // 使用JSON.NET将对象序列化到流中 JsonConvert.SerializeObject(myObject, writer); // 刷新流确保所有的数据都被写入 writer.Flush(); // 将流的指针重新定位到开始位置,准备读取 stream.Position = 0; // 使用StreamReader读取流 StreamReader reader = new StreamReader(stream); string jsonResult = reader.ReadToEnd(); // 反序列化JSON字符串回对象 MyObject deserializedObject = JsonConvert.DeserializeObject<MyObject>(jsonResult); // 关闭所有流 stream.Close(); writer.Close(); reader.Close(); ``` 在使用这些方法时,需要注意`BinaryFormatter`是已标记为不安全的,并且在未来的版本中可能会被移除,因此在新项目中推荐使用如`JSON.NET`这样的库进行序列化和反序列化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值