C# 中的流重用

2023-11-24

我一直在尝试一个我认为很简单的想法。我希望能够从某个地方(网站、文件系统、ftp)读取文件,对其执行一些操作(压缩、加密等),然后将其保存在某个地方(可能是文件系统、ftp 或其他任何地方) 。这是基本的管道设计。我想做的就是读入文件并将其放入 MemoryStream 中,然后对 MemoryStream 中的数据执行操作,然后将该数据保存在 MemoryStream 中的某个位置。我想我可以使用相同的 Stream 来执行此操作,但遇到了几个问题:

  1. 每次我使用 StreamWriter 或 StreamReader 时,我都需要关闭它,从而关闭流,以便我无法再使用它。看来必须有某种方法来解决这个问题。
  2. 其中一些文件可能很大,因此如果我尝试立即读取整个文件,我可能会耗尽内存。

我希望能够将每个步骤作为单独的线程旋转,并在流上有数据时立即开始压缩步骤,然后一旦压缩在流上有一些可用的压缩数据,我就可以开始保存它(例如)。使用 C# Streams 可以轻松实现这样的事情吗?有人有关于如何最好地实现这一目标的想法吗?

Thanks,

Mike


使用辅助方法来驱动流:

static public void StreamCopy(Stream source, Stream target)
{
    byte[] buffer = new byte[8 * 1024];

    int size;
    do
    {
      size = source.Read(buffer, 0, 8 * 1024);
      target.Write(buffer, 0, size);
    } while (size > 0);
}

您可以轻松组合您需要的任何内容:

using (FileStream iFile = new FileStream(...))
using (FileStream oFile = new FileStream(...))
using (DeflateStream oZip = new DeflateStream(outFile, CompressionMode.Compress))
    StreamCopy(iFile, oZip);

根据您实际想要执行的操作,您可以以不同的方式链接流。这也使用相对较少的内存,因为只有正在操作的数据位于内存中。

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

C# 中的流重用 的相关文章

  • 为什么使用数组索引循环数组比指针访问慢?

    我正在读Kochan的书 Programming in C 在第 14 页的 指针和数组 部分中 264 他说 一般来说 索引数组的过程比执行索引过程花费更多的时间 访问指针内容的过程 其实这也是主要原因之一 为什么使用指针来访问数组的元素
  • 如何转发声明要在 unique_ptr 的标准容器中使用的类

    在智能指针的标准容器中使用它时 是否可以避免完整的类定义可见 例如 我无法编译以下内容 include
  • C++:字符串流有什么好处?

    谁能告诉我一些在 C 中使用字符串流的实际例子 即使用流插入和流提取运算符输入和输出到字符串流 您可以使用字符串流来转换任何实现operator lt lt 到一个字符串 include
  • 错误:“运行所选代码生成器时出错:包恢复失败”

    我正在尝试将控制器添加到 ASP NET Core 项目中的解决方案中 当我尝试这样做时 我收到此错误 我收到相同的消息 为控制器添加最小依赖项和完整依赖项 我也有这个问题 使用实体框架添加控制器 gt 带有操作的 API 控制器 将给出
  • C++ 并行任务的开销

    我有以下简单的功能 include
  • C 链表销毁函数

    我正在尝试学习 C 和很多人一样 我对指针有点困惑 无论如何 我创建了一个递归函数来销毁我的链表 但是正如我调试的那样 当我从函数返回时 列表的头部不应该为空 所以我猜这是对指针的一些基本误解 这是函数 void destroy struc
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 微软怎么能说WinAPI中一个字的大小是16位呢?

    我刚刚开始学习WinAPI 在MSDN中 对WORD数据类型提供了以下解释 WORD16 位无符号整数 范围是十进制 0 到 65535 该类型在 WinDef h 中声明如下 typedef 无符号短 WORD 很简单 而且它与我一直在使
  • 可以通过模板间接访问基类中的私有类型

    我试图在编译时根据类型是否在给定范围内公开可用来选择要使用的类型 最好直接看代码 include
  • 是否自初始化 'A a = a;'允许吗?

    此代码在运行时在复制构造函数中失败 但编译器 MSVS2008 没有发出警告 您能解释一下 最好引用标准 这段代码是否非法或什么 我理解 A a a 永远不应该写在第一位 但我正在寻找理论背景 class A public A p new
  • 使用信号和槽更新指针

    我对 Qt 很陌生 请帮我解决这个问题 我正在使用线程在后台执行密集操作 同时我想更新 UI 所以我使用 SIGNALS 和 SLOTS 为了更新 UI 我发出一个信号并更新 UI 让我们考虑下面的示例代码 struct sample QS
  • 解析连接字符串

    是否有标准库或代码片段可以使用这样的连接字符串获取值 string connstr DataServiceUrl http localhost foo RemoteServerConnection server http localhost
  • 为什么最小的 int -2147483648 的类型为“long”? [复制]

    这个问题在这里已经有答案了 对于一个学校项目 我必须编写 C 函数 printf 的代码 一切进展顺利 但有一个问题我找不到好的答案 所以我来了 printf PRINTF d t d n 2147483648 告诉我 gcc Werror
  • 链接到ntdll.lib并调用ntdll.dll内部的函数

    我最近正在对私有 API 进行一些研究 我尝试调用诸如NtOpenFile在 ntdll dll 中LoadLibrary and GetProcAddress在运行时 幸运的是 它成功了 今天早上我在电脑上进行了文件搜索 发现ntdll
  • 在链表程序中使用模板时重载 C++ 中的 << 运算符

    我正在尝试实现一个链接列表 但是当我尝试重载 include
  • 如何从 C# 中的 Web Api 方法正确获取字节数组?

    我有以下控制器方法 HttpPost Route SomeRoute public byte MyMethod FromBody string ID byte mybytearray db getmybytearray ID working
  • 小数精度

    我使用小数类型进行高精度计算 货币 但我今天遇到了这个简单的划分 1 1 37 这应该再次得到 37 http www wolframalpha com input i 1 2F 281 2F37 29 http www wolframal
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • 从其对象获取结构体字段的名称和类型

    例如 我有一个类似这样的结构 struct Test int i float f char ch 10 我有一个该结构的对象 例如 Test obj 现在 我想以编程方式获取字段名称和类型obj 是否可以 顺便说一句 这是 C 你正在要求C
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • gson.fromJson() 中内存不足异常

    我使用以下代码将 Json 字符串 strWebserviceResult 转换为我的对象 EntMyClass entMyClass gson fromJson strWebserviceResult EntMyClass class W
  • 为什么我可以在禁用的 EditText 中输入内容?

    如果我禁用EditText小部件使用 editText setEnabled false 我仍然可以使用屏幕输入法 在模拟器和 G1 上 进行输入 这是故意的吗 我该如何解决这个问题 我注意到您无法通过点击禁用的 EditText 来激活屏
  • 检查Java中的ResultSet是否为空[重复]

    这个问题在这里已经有答案了 我在我的程序中使用 HSQLDB 我想检查我的结果集是否为空 check if empty first if results next false System out println empty display
  • 在 Vue 中单击路由器链接上的激活方法

    我正在 Chrome 扩展程序上进行帐户删除 并且有以下按钮
  • 原始双精度值是否相等取决于大小?

    我必须检查两个双精度值是否相等 包括大小和精度 我遇到一个奇怪的情况 其中原始双等于检查不一致并且取决于值的大小 我用过的Java版本 java version 1 6 0 26 Java TM SE Runtime Environment
  • 在 CSS 中添加 target="_blank"

    我的网站顶部菜单中有外部链接 我想在新选项卡中打开这些链接 我可以使用它来实现它target blank在 HTML 中 是否有类似的 CSS 属性或其他属性 正如 c69 提到的 没有办法用纯 CSS 来做到这一点 但你可以使用 HTML
  • 使用变量定义 PHP 函数

    我想使用变量动态命名一些函数 如下所示 thing some function function thing echo hi 我知道我可以call使用这样的变量的函数 something function exists if somethi
  • 通过使用 Safari 更改 window.location 下载文件

    我有一个离线 html 文件 通过将 window location 设置为来生成并保存 CSV data text csv base64 Intfa2V5fSIsInt 但是 在 Safari 中 这只会在浏览器中显示 CSV 将网址设置
  • 真的对 javascript es6 箭头函数的“封闭范围”感到困惑

    我在网上做了很多研究 阅读了很多帖子 包括MDN等等 据我所知 对于传统定义的函数 函数中的 this 是由调用 调用它们的对象定义的 以及几种不同的情况 对象文字 新的构造函数 事件处理程序等 我知道对于箭头函数 this 是按词法定义的
  • 对大文本值进行小幅编辑时如何有效地使用 gettext PO 文件

    寻找有关如何在对大 msgid 值进行小编辑时有效使用 gettext PO 文件的提示和 或工具 示例 我们有大量多句子 多段落消息存储在 PO 消息目录文件中 如果我们对消息进行非常小的更改 也许是编辑单个句子 甚至更正标点符号 那么当
  • 在 Swift 中,如何从内存中完全删除 UIView?

    请考虑以下代码 class myManager var aView UIView func createView aView UIView func removeView aView nil anything else 如果我创建一个UIV
  • T-SQL:当长度 > VarChar(MAX) 时,如何比较 XML 类型的两个变量?

    仅使用 SQL Server 2008 R2 这将位于存储过程中 如何确定 XML 类型的两个变量是否等效 这是我想做的 DECLARE XmlA XML DECLARE XmlB XML SET XmlA Really long Xml
  • xdebug断点失败

    以通常的方式庆祝建立一个新的测试服务器 通过寻求帮助让 xdebug 工作 Server Ubuntu 服务器 16 10 Nginx PHP 7 Xdebug 设置的要求如下http php built com installing xd
  • 在水豚中选择具有多个类的元素

    我正在使用 Selenium 在 Capybara 中编写自动化代码 我的 HTML 中有以下元素 我想在水豚中单击该元素 a href class classA classB click me a 目前 工作方式如下 find class
  • 多重继承会导致虚假的、不明确的虚函数重载

    在这个例子中 类Foo and Bar由图书馆提供 我的课Baz继承两者 struct Foo void do stuff int int struct Bar virtual void do stuff float 0 struct Ba
  • .Net 的开源代理库 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找一个开源的 Ne
  • 将 []byte 转换为小/大端有符号整数或浮点数?

    我能够转换 byte转换为无符号整数 a binary LittleEndian Uint16 sampleA b binary BigEndian Uint32 sampleB 这利用了 Go 包中的 Big Endian 和 Littl
  • 我应该关闭JNDI获取的数据源吗?

    更新 显然 Tomcat 从 7 0 11 开始 为您关闭了数据源 因此它在 web 应用程序的 contextDestroyed 中不可用 看 https issues apache org bugzilla show bug cgi i
  • objdump - head ELF - 标志的含义?

    objdump f a out a out file format elf32 i386 architecture i386 flags 0x00000112 EXEC P HAS SYMS D PAGED start address 0x
  • C# 中的流重用

    我一直在尝试一个我认为很简单的想法 我希望能够从某个地方 网站 文件系统 ftp 读取文件 对其执行一些操作 压缩 加密等 然后将其保存在某个地方 可能是文件系统 ftp 或其他任何地方 这是基本的管道设计 我想做的就是读入文件并将其放入