当我添加新数据时,列表项会发生变化...为什么?

2023-12-05

我有一种方法可以将文件转换为字节,以便稍后可以通过互联网发送它。无论如何,因为我计划发送大文件,所以我发送大块文件而不是发送整个文件。每个块由一个字节数组 (byte[]) 组成。我对这一切都很陌生,所以我想在发送之前将每个块保存在块列表(List)中。所以我的课程看起来像:

public class SomeClass
{

    public List<byte[]> binaryFileList;

    public void SendChunk(byte[] data, int index)
    {
        binaryFileList.Add(data);
        // later I will add code in here to do something with data
    }

    public void test(string path)
    {
        binaryFileList = new List<byte[]>();

        System.IO.FileStream stream = new System.IO.FileStream(path,
            System.IO.FileMode.Open, System.IO.FileAccess.Read);

        var MaxChunkSize = 10000;
        byte[] chunk = new byte[MaxChunkSize];
        while (true)
        {
            int index = 0;
            // There are various different ways of structuring this bit of code.
            // Fundamentally we're trying to keep reading in to our chunk until
            // either we reach the end of the stream, or we've read everything we need.
            while (index < chunk.Length)
            {
                int bytesRead = stream.Read(chunk, index, chunk.Length - index);

                if (bytesRead == 0)
                {
                    break;
                }
                index += bytesRead;
            }
            if (index != 0) // Our previous chunk may have been the last one
            {
                SendChunk(chunk, index); // index is the number of bytes in the chunk
            }
            if (index != chunk.Length) // We didn't read a full chunk: we're done
            {
                return;
            }
        }


    }
}

当我执行时:

SomeClass s = new SomeClass();
s.test(@"A:\Users\Tono\Desktop\t.iso");

binaryFileList 列表填充文件块:A:\Users\Tono\Desktop\t.iso

现在,当我从该数据创建文件时,问题就出现了。调试时,我注意到问题是因为二进制 FileList 中的项目在我输入数据时发生了变化。让我告诉你我的意思:

enter image description here

请注意,在此调试中,这是我第一次向 binaryFileList 添加项目。而且您还可以看到数组中该项目的每个字节......

现在我将让该方法运行更多次,向二进制 FileList 添加更多项目。

所以现在 binaryFileList 有 278 个项目,而不是最后一张图片中的项目:

enter image description here

所以到目前为止一切看起来都还不错吧?但是你们还记得二进制文件列表的第一项包含一个几乎全是 0 的字节数组吗?看一下二进制 FileList 的第一项:

enter image description here

当我不断向二进制 FileList 添加项目时,请注意第一个项目如何变化:

enter image description here

换句话说,binaryFileList 是一个 byte[] 列表。当我向 binaryFileList 添加一个 byte[] 时,其他 byte[] 不应改变。他们确实改变了!为什么!?


以下行必须进入循环内部:

byte[] chunk = new byte[MaxChunkSize];

您只需创建该块一次,然后每次都用新数据覆盖它。您在列表中存储的内容只是对此块的引用,而不是它的副本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我添加新数据时,列表项会发生变化...为什么? 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • jQuery 查找最后一个输入并追加

    我正在尝试在 div 中的最后一个输入字段之后附加图像 关于为什么这不起作用的任何想法 img src img loading gif appendTo form find input last img src img loading gi
  • 提取 R 中最后一个正则表达式匹配

    我在用着mutate with str extract 将数据框中的字符串列压缩为单个关键字列 我的问题是其中一个字符串包含两个关键字 而第二个对我来说更重要 不过 正则表达式总是首先找到我告诉它寻找的替代方案 有办法改变这个吗 MWE 无
  • 在 ASP.Net MVC 中动态地将角色映射到控制器

    我目前正在 MVC 应用程序的过滤器中对授权角色进行硬编码 如下所示 Authorize Roles Administrator Manager 我希望最终有一种方法将角色映射到每个控制器 以便站点管理员可以分配哪些角色可以执行每组操作 s
  • 调用init方法失败;嵌套异常是 java.lang.IncompleteClassChangeError: Implementing class

    错误信息 SEVERE Exception sending context initialized event to listener instance of class org springframework web context Co
  • 将视图转换为位图而不在 Android 中显示?

    我将尝试解释我到底需要做什么 我有 3 个独立的屏幕 分别为 A B C 还有另一个屏幕称为 HomeScreen 其中所有 3 个屏幕位图都应显示在图库视图中 用户可以选择他想要进入哪个视图 我已经能够通过仅将所有代码放置在 HomeSc
  • 是否有适用于 WPF 的虚拟化 WrapPanel 可用?商业或免费的

    有可用的虚拟化 WrapPanel 吗 商业或免费的 我看过一些博客 包括 dan 的 但它似乎在我的应用程序中效果不佳 特别是当我有不同大小的子项目时 此外 即使尺寸相同 那些免费的也不能很好地工作 市场上有商业的吗 我找不到任何 请给出
  • 不接受 gnuplot-datafile 中的单列

    我想在 gnuplot Ubuntu 上为 4 6 4 中绘制一些数据 但我遇到了一个奇怪的问题 我想要绘制的数据是这样的 0 200002 1 802499 0 019630 0 026596 1 0 200004 1 782499 0
  • 递归地将 XML 添加到 TreeView 中

    我正在尝试使用 C 将节点的 XML 文件导入到 TreeView 中的相同节点结构中 我发现了很多使用单节点结构的示例 但在遍历 XML 文件并用它填充 TreeView 时遇到了很多问题 这是 XML 文件的示例
  • for 循环消除

    我想使用指数技巧消除for我的 C 11 程序中的循环 类似于强制 funroll loops 这是一个例子 template
  • 如何确定从 Java 文本文件中读取的最大值和最小值

    我正在为班级做作业 正在寻找一些有用的指导 而不是完整的解决方案 基本上 我必须编写一个 Java 程序 读取文本文件并逐行列出信息 列出行号 最后打印出最大值和最小值以及与每个值相关的年份 该文本文件包含年份和该年的温度 因此 它列出了类
  • 在sql server中生成序列

    我正在开发一个函数 该函数将采用一个小数和一个大数作为参数 并返回一个包含其间 并包括 所有内容的表 我知道我可以使用游标并增加一个变量 每次迭代将其添加到基于范围的表中 但如果可能的话 我宁愿避免使用游标 还有其他人有关于执行此操作的方法
  • 如何在js文件中写入php代码

    我的程序是我将页面划分为第一个 div 中的 div 我添加了此代码
  • 宏完成后删除文档

    我有一个 Word 2007 docm 文件 我将其作为电子邮件附件发送给用户 以便他们更新文件 宏从服务器下载文件并正确安装它们 而不是将文件作为电子邮件附件发送并相信用户能够正确安装 我会改用 VBScript 文件 但不允许我通过电子
  • JSF 验证错误,丢失值

    我有一个带有复合键的更新表单 所有复合键都显示在输出框中 因为我为每个复合键都有隐藏字段 验证错误后 这些输出框值为空 我该如何解决这个问题 我在同一页面上 所以它不需要有这些值 这确实是一种非直觉行为h inputHidden 我曾经提交
  • 获取 API 时出错/无法从方法“getHeroes”返回“List”类型的值,因为返回类型为“Future?>”

    我是 Dart Flutter 的新手 正在努力使用 API 这是我的模型文件夹中的文件 List
  • 画布上下文中的 React-chartjs-2 渐变填充错误

    我有一个react chart js2组件 我试图在填充上制作渐变 但是我遇到了一些不同的打字稿错误 并且似乎无法让它工作 该文档表示将 data 属性作为函数传递并引用画布 以便访问画布上下文以添加渐变 不幸的是 这不起作用 这是文件的代
  • SVN Repo 给出 404 not Found

    我已经在 Ubuntu 12 04 上安装了 svn 版本 1 6 17 r1128011 我在这里做了我的回购 sudo mkdir home 2nd disk svn 设置我的 etc apache2 mods enabled dav
  • 寻找一种更Pythonic的方式来访问数据库

    我有很多遵循这种模式的 python 方法 def delete session guid conn get conn cur conn cursor cur execute delete from sessions where guid
  • Facebook 视频上传 OAuthException 200 错误

    我有与此类似的代码 位于 使用 php sdk graph api 将视频上传到 facebook 在我编写的应用程序中 但昨天我开始收到 OAuthException 错误 我寻找了一个简单的视频上传示例到 Facebook 页面进行测试
  • 当我添加新数据时,列表项会发生变化...为什么?

    我有一种方法可以将文件转换为字节 以便稍后可以通过互联网发送它 无论如何 因为我计划发送大文件 所以我发送大块文件而不是发送整个文件 每个块由一个字节数组 byte 组成 我对这一切都很陌生 所以我想在发送之前将每个块保存在块列表 List