为了账号安全,请及时绑定邮箱和手机立即绑定

流 字节数组 字符串

流 字节数组 字符串

尚方宝剑之说 2018-09-12 05:06:37
我在做对象序列化为json的时候,用的.net 自带的类DataContractJsonSerializer。需要经历这样的流程:object—>stream->字节数组->字符串。我纳闷为什么没有提供这样的方法object->字符串。我的问题:1.object->stream...仅仅是为了方法的通用性吗?2.很像知道stream 在.net framework 中的作用,如果没有这个东西,可以吗?
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

你的理解"序列化"的含义.

"序列化 (serialization)将对象的状态信息转换为可以存储或传输的格式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。"

上面的解释,涉及到两个重要概念:存储,传输.

存储,传输的格式是什么?那就是字节流,或者说字节数组.

字符串,只是一种抽象,是对一段字节数组的逻辑含义的概括,比如,我给你四字节的字节数组,你认为这四个字节的数组是代表"字符串",还是代表"32整形值"呢?你当然不知道,这就需要提供这个四字节数组的人告诉你,他的这个四字节数组具体代表什么.

同样,Stream 也只是一中抽象,Stream对象是一组对字节数组的操作,Stream对象内部使用字节数组存储数据,对于不同的派生类FileStream,NetworkStream,都提供了自身优化的方式来衔接内存中的字节数组与磁盘上或网络IO设备上的字节数组.

json序列化后的实际对象应该是字节数组,而非字符串,只是为了便于人阅读,才提供一定的方法可以将该字节数组转换为可供人读的字符串.

所以,对于你的第一个问题,不是为了通用性,而是对序列化过程的职责分离.至于拿到序列化字节数组后,你想用来干什么,就留给使用者去决定,这时候,你可以使用BinaryReader StreamReader TextReader等配合Encoding来将字节数组转换成你想要的string,int32,double等.

Stream的作用,我在前面已经说过了,至于没有这个东西的坏处就是:很多人会写自己的 Stream.


查看完整回答
反对 回复 2018-09-25
  • 2 回答
  • 0 关注
  • 484 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信