【问题标题】:Is Serialization the same as GetBytes?序列化和GetBytes一样吗?
【发布时间】:2015-06-23 08:23:17
【问题描述】:

Java 提供了一种机制,称为对象序列化,其中对象可以表示为字节序列。

在谷歌上找到了这个。我使用 .Net 使用套接字连接发送数据包。我用Encoding.Default.GetBytes()

序列化比较混乱,和GetBytes有什么区别?

【问题讨论】:

    标签: .net


    【解决方案1】:

    不,GetBytes() 只是使用要求的编码string 转换为其二进制表示。所以它确实是序列化的,但它是非常特定于字符串的。

    当你想将 any 对象序列化为字节时,你可以使用BinaryFormatter。有关如何使用BinaryFormatter 序列化对象的更多信息,请参阅here

    【讨论】:

    • GetBytes() 然后序列化,那我该怎么办?
    • 不,已经序列化了,但是只能序列化一个string。如果要序列化另一种类型的对象,请使用BinaryFormatter
    • 那么,GetBytes 基本上是字符串的序列化?我目前正在练习通过套接字制作聊天应用程序,因此,GetBytes 就足够了吗?
    • @MalcolmWho 通常这还不够。根据传输介质,您必须在某处写入编码字符串的长度(通常您会将其添加到字符串之前,使用 BitConverter.GetBytes(lengthofserializedstring) 获取 byte[] 并在发送 byte[] 之前发送它由Encoding.Default.GetBytes() 收到)。啊...如果可能的话,你应该使用Encoding.UTF8.GetBytes
    • @MalcolmWho:是的,如果这是唯一的消息。我可以建议在SignalR 抢购吗?它使用 Web 套接字进行通信,并提供了许多您需要的功能。
    【解决方案2】:

    在 .NET 中,您也有序列化。你有二进制序列化、XML序列化和JSON序列化。

    通过序列化,您可以将对象转换为另一种格式,以便存储或通过网络发送。序列化的对象可以反序列化为对象的实例(如果该类在运行时可用)。

    使用 GetBytes(),您可以在运行时获得变量的字节表示。没有关于类型的信息。 您可以将 Bytes 解释为您想要的任何类型,当然会产生无用的结果。 GetBytes() 返回存储在物理内存中的原始字节。

    【讨论】:

    • "使用 GetBytes() ... 没有关于类型的信息。"有:是string
    • 是的,我明白了,我对 BitConverter.GetBytes() 有点误解,但我认为基本的想法仍然成立。
    • @Patrick:在 GetBytes() 创建的字节中,是否有任何信息需要将其转换为字符串?不,不是的。当通过网络发送到另一个 .NET 进程时,让另一个进程检测字节应该转换为哪种类型。
    • 如果只是交换字符串,则不需要。
    猜你喜欢
    • 2013-05-21
    • 2013-04-26
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2016-09-12
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多