添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爽快的凉茶  ·  Deployment Guide for ...·  2 年前    · 
爱笑的卡布奇诺  ·  Android ...·  3 年前    · 
卖萌的佛珠  ·  Python3 读写文件 - 简书·  3 年前    · 
一直单身的手链  ·  c++ - how to print ...·  3 年前    · 

在进行序列化与反序列化的时候,程序出错了:

“二进制流“69”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改。”

/// <summary>
/// 对接收到或待发送数组做序列化与反序列化的类
/// </summary>
public class BufferHelper
/// <summary>
///  对一个传入的对象序列化为数组
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] Serialize(object obj)
BinaryFormatter bf = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
bf.Serialize(stream, obj);
byte[] datas = stream.ToArray();
stream.Dispose();
return datas;
/// <summary>
/// 将一个字节数组反序列化为一个对象
/// </summary>
/// <param name="datas"></param>
/// <param name="index"></param>
/// <returns></returns>
public static object Deserialize(byte[] datas, int index)
BinaryFormatter bf = new BinaryFormatter();
MemoryStream stream = new MemoryStream(datas, index, datas.Length - index);
object obj = bf.Deserialize(stream);
stream.Dispose();
return obj;

找了很久,一直没找到问题的原因,后来突然发现是在传入byte[] datas时,从其他地方传入的数组不完整,这应该是造成了无效流,所以出错。

我们在使用Array.Copy()复制数组时,一定要使目标数组大小能够接受完整的源数组数据。

在进行序列化与反序列化的时候,程序出错了:“二进制流“69”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改。”///     /// 对接收到或待发送数组做序列化与反序列化的类    ///     public class BufferHelper    {        ///         /// 它可以指定你希望对集合进行的操作, 可以执行非常复杂的查找、过滤和映射数据等操作。 使用 Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。 简而言之,Stre...
好了,背景知识介绍完成,并且我们在最开始也对 Stream 有了一个大致的了解,在本章中我们详细的介绍一下 Stream ,每一个示例都会有相应的代码配合,让读者理解更加的透彻。 对 Stream 的使用就是实现一个 filter-map-reduce 过程,产生一个最终结果,或者导致一个副作用(side effect),当我们使用 流 的时候,通常会包括三个基本的步骤:
list. stream () 2.2、中间操作 一个 流 后面可以跟随零个或多个中间操作,其目的主要是打开 流 ,做出某种程度的数据过滤/映射,然后返回一个新的 流 ,交给下一个操作使用 filter() 2.3、终结操作 一个 流 只能有一个终结操作,当这个操作执行后, 流 就被使用"光"了,无法再被操作。所以这必定是 流 的最后一个操作 forEach 2.4、案例 public class Demo1 { 计算一个字符串中小写字母的个数( 提示: 参阅 String 对象的 chars 方法)。 在一个字符串列表中, 找出 包含 最多小写字母的字符串。 对于空列表, 返回 Optional &lt;String&gt; 对象 第一个比较简单 import java.util.ArrayList; import java.util.Comparator; import java.u......
说到 Stream 便容易想到I/O Stream ,而实际上,谁规定“ 流 ”就一定是“IO 流 ”呢?在Java 8中,得益于Lambda所带来的函数式编程 引入了一个全新的 Stream 概念,用于解决已有集合+数组既有的弊端。 使用 Stream 流 的方式,遍历集合,对集合中的数据进行过滤 Stream 流 是JDK1.8之后出现的 关注的是做什么,而不是怎么做 publ...
Stream 流 编程 Stream 不是集合元素,也不是数据结构,它相当于一个 高级版本的 Iterator,不可以重复遍历里面的数据,像水一样, 流 过了就一去不复返。它和普通的 Iterator 不同的是,它可以并行遍历,普通的 Iterator 只能是串行,在一个线程中执行。 外部迭代与内部迭代 使用for等进行迭代我们叫做外部迭代,使用 stream 流 迭代叫做内部迭代。 public class S...
Stream 是Java8最大的亮点,它是对集合对象功能的增强,专注于对集合对象进行各种高效的数据处理, Stream API借助于lambda表达式极大的提高了编程效率及程序的可读性,同时 Stream 提供串行和并行两种模式进行汇聚操作,并行模式可以充分利用多核处理器的优势。结合lambda表达式及 Stream API可以很方便的编写高性能并发程序。       在操作数据库时,S
在Java中, 二进制 流 通常是用字节 流 来表示的。字节 流 可以读取和写入字节数据,因此可以用来处理 二进制 数据。在处理 二进制 数据时,我们可以使用Java中的 FileInput Stream 和 FileOutput Stream 类来读写字节 流 。例如,以下代码可以将 二进制 文件中的数据读取到字节数组中: File file = new File("data.bin"); byte [] data = new byte [(int)file.length()]; FileInput Stream fis = new FileInput Stream (file); fis.read(data); fis.close(); 类似地,我们可以将字节数组写入到 二进制 文件中: File file = new File("data.bin"); byte [] data = new byte [] {0x01, 0x02, 0x03}; FileOutput Stream fos = new FileOutput Stream (file); fos.write(data); fos.close(); 在这里,我们使用了十六进制的字面量来表示 二进制 数据。例如,0x01 表示 二进制 数 00000001。因此,字节数组 {0x01, 0x02, 0x03} 表示 二进制 数据 00000001 00000010 00000011。