这个问题主要是因为我不熟悉数据流的操作所导致的,但 MSDN 上也没有提到此问题。

在实例化 MemoryStream 对象时 MSDN 提到 “流的 current position 是下一个读取或写入操作可能发生的位置。当前位置可以通过 Seek 方法检索或设置。在创建 MemoryStream 的新实例时,当前位置设置为零。”

在使用 ReadByte 方法时 MSDN 提到“如果读操作成功,则流内的当前位置将向前推进一个字节。如果发生异常,则流内的当前位置不变。”

但是在 WirteByte 方法中 MSDN 却没有提到任何相关位置改变的信息,根据 ReadByte 方法的说明同理 Wirte 方法,推测调用了 Wirte 后 Position 属性会置为最末一位,事实上我的流长度是 33081,Position 的值也就是 33081 确实是位置改变了,以前以为只有在读取时这个位置才会改变,看来写入也是同理的。

进行反序列化时就提示“在分析完成之前就遇到流结尾。”错误,因为我使用 Mdi 子窗体,导致这个错误信息无法直接看到,仅提示“调用的目标发生了异常。”,所以导致我绕了不少弯路,其实把 Mdi 方式先改为 ShowDialog 方式马上就能看到原因,所以只要重设数据流读取的起始位置即可:

using (MemoryStream stream = new MemoryStream()) {    byte[] bytes = Convert.FromBase64String(s);    stream.Write(bytes, 0, bytes.Length);stream.Seek(0, SeekOrigin.Begin); //必须设置流的起始位置,否则将报错BinaryFormatter formater = new BinaryFormatter();object o = formater.Deserialize(stream);
}

有时想太多不如找最直接最简单的那个方法才是最有效的方法,就像这次,错误信息被屏蔽掉了,那么就应该去掉那个干扰源~

转载于:https://www.cnblogs.com/islee/archive/2011/05/03/2035590.html

MemoryStream 反序列化的报错问题相关推荐

  1. 【WEB安全】Xstream最新反序列化poc执行报错问题

    前言 最近有个需求,用Xstream反序列化打个内存马,从通用性来讲,肯定用1.4.17的洞去打应用范围最广.众所周知,Xstream官方会提供其漏洞的poc.在我实验之下,1.4.17的几个poc只 ...

  2. 【Redis 反序列化报错】 Cannot construct instance of `com.vt.common.Result` (no Creators, like default constr

    最近做了一个项目,数据量比较大,所以用到了 @Cacheable注解,嫌麻烦,百度找了相关配置,如下: 序列化配置@Beanpublic static RedisTemplate<String, ...

  3. Rest请求使用Jackson反序列化报错,Cannot deserialize instance of `java.lang.String` out of START_OBJECT toke

    Rest接口,使用Jackson作为json转换器,后端接收请求的时候报错了,异常信息: JSON parse error: Cannot deserialize instance of `java. ...

  4. qpython3l手机版安装第三方库总是报错_python编码问题在此终结

    1 版本差异概览 1.1 Python 2.X: str(用于8位文本和二进制数据) unicode(用于宽字符文本) 在Python2中,通用的str类型填补了二进制数据的这一角色(特指python ...

  5. java增强型for报错_Java基础——增强for循环

    java1.5版本引入了一个增强for循环,基本原理和for循环类似. 语法声明:for(表达式:条件表达式) 举例:for (String str : set) 解释:set代表set集合,str代 ...

  6. 【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露

    1. 报错信息 2021-10-29 08:44:56 WARN [,,,] [main] o.a.c.loader.WebappClassLoaderBase - The web applicati ...

  7. 使用 Feign 调用分页接口报错:Method has too many Body parameters(亲测)

    一.背景 接口定义: @ApiOperation(value = "分页查询会话") @PostMapping(Routes.SESSIONS_QUERY) JsonResult& ...

  8. Flink解析kafka canal未压平数据为message报错

    canal使用非flatmessage方式获取mysql bin log日志发至kafka比直接发送json效率要高很多,数据发到kafka后需要实时解析为json,这里可以使用strom或者flin ...

  9. wxml报错原因_C#生成、解析xml文件以及处理报错原因

    转载自:http://blog.csdn.net/lilinoscar/article/details/21027319 简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数 ...

最新文章

  1. 漫画 | 如果面试时大家都说真话......
  2. 4.1.1 网络层功能概述
  3. 百货中心供应链管理系统
  4. 标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast(转载)
  5. Entity Framework Core 使用HiLo生成主键
  6. C#在Linux上的开发指南
  7. Separate Query from Modifier(分离查询和修改)
  8. mysql外键约束脚本_使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)...
  9. 1inch将升级至1.1版本并开启新的流动性挖矿计划
  10. python二十四点_python实现24点游戏(地球上最短的24点游戏代码?)
  11. 数字的眼光看世界(常见常量、数值大下)
  12. 计算机中的bit byte(B) mb gb 的关系
  13. python写代码酷炫插件_使用 Python 制作酷炫多彩的 Jenkins 插件词云图
  14. Objective-C 函数(方法)的定义和调用
  15. 各种类型的电影排行榜-movie路线
  16. OpenCV-绘制同心圆
  17. 【HAVENT原创】Firebase 相关操作及代码示例
  18. Word小技巧总结(持续更新中……)
  19. window7电脑屏幕亮度调节的方法
  20. 关于Render在不同情况的用法

热门文章

  1. ubuntu下无法在目录下创建文件夹,权限不足解决办法
  2. Oracle 11g创建Interval分区表
  3. ORACLE 动态SQL中的多个单引号
  4. CF767C Garland
  5. muse ui tabs背景颜色字体颜色
  6. iframe 页面刷新
  7. inline-block的兼容性问题
  8. Java持久性API(JPA)第7讲——实体生命周期及生命周期回调方法
  9. html5纪念日期代码,HTML5适合的情人节礼物有纪念日期功能
  10. android 动态矩形条,android – 从相机中动态检测不同形状(圆形,方形和矩形)?