相关文章推荐
刀枪不入的皮带  ·  pcap_loop() function ...·  2 天前    · 
刀枪不入的皮带  ·  Code Inside Blog | ...·  9 月前    · 
刀枪不入的皮带  ·  Python项目中import ...·  10 月前    · 
刀枪不入的皮带  ·  PySimpleGui ...·  10 月前    · 
爱看球的伤疤  ·  Jetlinks - ...·  1小时前    · 
打篮球的领带  ·  sklearn.manifold.Local ...·  2 小时前    · 

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

“二进制流“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。
 
推荐文章