BinaryReader可以读取对象吗?

问题描述

请在服务器端查看以下代码:

NetworkStream ns = clientSocket.GetStream();
BinaryReader reader = new BinaryReader(clientSocket.GetStream());
Person p1 = new Person();
p1.Name = reader.ReadString();
p1.Age = reader.ReadInt32();
p1.Gender = reader.ReadChar();

以及下面的客户端代码:

            Person p1 = new Person();
            p1.Name = "Bert";
            p1.Age = 46;
            p1.Gender = 'M';

            using (BinaryWriter writer = new BinaryWriter(client.GetStream()))
            {
                writer.Write(p1.Name);
                writer.Write(p1.Age);
                writer.Write(p1.Gender);
                writer.Write(true);
            }

它可以按预期工作,即在服务器上重建对象。

是否有更优雅的方法来做到这一点?即传递整个对象而不是每个字段?这似乎在客户端起作用:

BinaryWriter writer = new BinaryWriter(client.GetStream());

                Byte[] bytes = SerializeToBytes<Person>(p1);
                writer.Write(bytes);

我已经在服务器端尝试过此操作:

 public static object DeserializeFromBytes(byte[] bytes)
        {
            var formatter = new BinaryFormatter();
            using (var stream = new MemoryStream(bytes))
            {
                return formatter.Deserialize(stream);
            }
        }

但是,我无法从BinaryReader中获取字节。我已经尝试过了:

reader.ReadBytes((int)reader.BaseStream.Length);

这将导致以下情况:

System.NotSupportedException: 'This stream does not support seek operations.'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...