使一个流的输出成为另一个流的输入的最佳方法是什么

2023-12-23

我想知道除了使用字节缓冲区和循环之外,是否有更好/内置的方法从一个流读取并将其写入另一个流(在.NET 中)。通常,这样做是为了将转换应用于流并将其继续移动。

在本例中,我正在加载一个文件,将其放入 deflate 流并将其写入文件(为简单起见,删除了错误处理):

byte[] buffer = new byte[10000000];
using (FileStream fsin = new FileStream(filename, FileMode.Open))
{
    using (FileStream fsout = new FileStream(zipfilename, FileMode.CreateNew))
    {
        using (DeflateStream ds = new DeflateStream(fsout, CompressionMode.Compress))
        {
            int read = 0;
            do
            {
                read = fsin.Read(buffer, 0, buffer.Length);
                ds.Write(buffer, 0, read);
            }
            while (read > 0);
        }
    }
}
buffer = null;

Edit:

.NET 4.0现在有了Stream.CopyTo函数,哈利路亚


虽然我倾向于将循环部分放入一个CopyTo扩展方法,例如

public static void CopyTo(this Stream source, Stream destination)
{
    var buffer = new byte[0x1000];
    int bytesInBuffer;
    while ((bytesInBuffer = source.Read(buffer, 0, buffer.Length)) > 0)
    {
        destination.Write(buffer, 0, bytesInBuffer);
    }
}

然后您可以将其称为:

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

使一个流的输出成为另一个流的输入的最佳方法是什么 的相关文章

  • Castle.Windsor可以自动解析具体类型吗

    我们正在评估 C 项目的 IoC 容器 Unity 和 Castle Windsor 都表现出色 我喜欢 Unity 的一件事 NInject 和 StructureMap 也这样做 是 显而易见如何构造它们的类型不必向 IoC 容器注册
  • DotNetOpenId —“此消息已被处理”错误(第 2 部分)

    这已经被问过Here https stackoverflow com questions 727838 dotnetopenid this message has already been processed error 但不是我做的 OP
  • “匿名递归”在 .NET 中有效吗?它在 Mono 中是这样的

    我冲浪进入this http blogs msdn com b wesdyer archive 2007 02 02 anonymous recursion in c aspx几天前关于 C 中的匿名递归 的网站 本文的主旨是以下代码在 C
  • 打印 WPF 位图图像

    打印位图图像的最佳方法是什么 我有 System Drawing 背景 所以我正在考虑将其转换为位图 然后打印它 但我认为可能有更好的方法 Thanks 根据 Drew 的回答 最好测量并安排传递给 PrintVisual 方法的容器 这将
  • 从 .NET 应用程序登录 Windows

    我认为它应该是一个Windows服务 当给定某些条件时 它应该执行登录到机器的操作 机器将在 登录屏幕 中检查网络服务 以了解登录时应使用的用户名和密码 这可以吗 我不想要 自动登录 Windows 功能 Thanks AFAIK 无法完成
  • 集合已修改;枚举操作可能无法执行 - 为什么?

    我正在枚举一个实现 IList 的集合 并且在枚举期间我正在修改该集合 我收到错误 集合已修改 枚举操作可能无法执行 我想知道为什么在迭代期间修改集合中的项目时会出现此错误 我已经将 foreach 循环转换为 for 循环 但我想知道发生
  • DynamoDb:删除具有相同哈希键的所有项目

    考虑下表 Table documentId Hash Key userId Range Key 如何编写代码来删除所有具有相同内容的项目documentId并且最好不取回物品 目前 您不能仅通过传递 Hash 键来删除所有项目 要删除项目需
  • 如何重置 MS Access 中的身份列

    我有一个 Windows 应用程序连接到MS Access 2007数据库 已有300多条记录Customer Table 我已经删除了所有记录 但插入新记录后CustomerID回报301 但我想将其设置为1 我尝试了以下查询 ALter
  • iOS 应用程序和.NET 应用程序之间的通信?

    我有 2 个应用程序 一个是 iOS 应用程序 一个是 NET 应用程序 我希望我的 iOS 应用程序发送一条消息 调用 NET 应用程序的方法 将一些字符串发送到 NET 应用程序以保存到数据库 那么 我的 iOS 应用程序如何与 NET
  • .NET:为什么不检查枚举的范围/值?

    这一直困扰着我 也许对 NET 内部结构有一定了解的人可以向我解释一下 假设我定义一个枚举如下 public enum Foo Eenie 1 Meenie 2 Miney 3 Moe 4 现在 还假设我的代码中的某处有以下代码 int b
  • 对具有 Stream 类型成员的对象进行 JSON.NET 序列化?

    希望这是一个我忽略的简单修复 我有一个对象传递到事件处理程序中 我想使用 JSON NET 序列化该对象 如下所示 public void OnEvent IEventObject foo Serialize foo to string d
  • 有什么方法可以在 ASP.NET MVC Web 应用程序中模拟声明主体吗?

    我有一些ASP NET MVC控制器代码检查用户是否经过身份验证 如果是 则检查用户是否具有特定声明 工作正常 我有一些单元测试 我需要模拟一个IPrincipal 这很容易做到 但我不知道如何检查索赔 我通常会做类似的事情 public
  • 使用 ServiceStack JsonSerializer 反序列化包含 Dictionary 属性的类型

    下面的代码片段显示了我可以实现此目的的两种方法 第一个是使用MsgPack https github com msgpack msgpack cli第二个测试是使用ServiceStack 的 JSONSerializer https gi
  • 从 Windows 选择声音并播放它们

    我有一个 WinForms 应用程序 该应用程序有一个 首选项 部分 用户可以在其中选择显示警报时播放哪些声音 是否可以有一个组合框 用户可以从 Windows 存储的声音中进行选择 例如 紧急停止 紧急蜂鸣 等 这些可以在 控制面板 gt
  • TPL架构问题

    我目前正在开展一个项目 我们面临并行处理项目的挑战 到目前为止没什么大不了的 现在来说说问题 我们有一个 ID 列表 我们定期 每 2 秒 为每个 ID 调用一个 StoredProcedure 需要单独检查每个项目的 2 秒 因为它们是在
  • 为什么我可以将 COM 对象转换为错误的接口?

    我有一个 NET 程序 它与另一个进程中的 mshtml 对象进行交互 我写了一个小示例项目 https github com hakito ComCastExample从头来说明问题 在此示例中 我直接使用 COM 引用进行 mshtml
  • AutoMapper 无法识别特定于配置文件的前缀

    我正在尝试使用 AutoMapper 从属性名称之前有前缀的类中获取数据 并将其映射到没有这些前缀的第二个类 但是 我不一定希望它always删除该前缀 我只想让它为这个特定的映射执行此操作 我的源类如下所示 public class Ad
  • 现在正在复制文件吗? [复制]

    这个问题在这里已经有答案了 可能的重复 C 不时检查文件是否存在并从中读取 https stackoverflow com questions 12578177 c sharp from time to time check if a fi
  • Azure 应用服务自定义身份验证获取 System.ArgumentNullException:“值不能为空”“参数名称:提供程序”

    我有一个简单的 dot net 移动应用程序 具有自定义身份验证 如下所示 https learn microsoft com en us azure app service mobile app service mobile dotnet
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U

随机推荐

  • 使用 AngularJS 处理 DOM

    我知道操作 DOM 违反了 Angular 的规则 但在这种情况下 我必须横向 DOM 来修改同级节点 在 jQuery 中你可以做这样的事情 this parent addClass loading 角度元素包裹着jqLite默认情况下
  • 如何通过 Python Azure SDK 了解 Azure blob 对象的大小

    继面向 Python 开发人员的 Microsoft Azure 文档 https learn microsoft com en us python api azure storage blob azure storage blob mod
  • 无法将类型“System.Collections.Generic.List`1[Item]”的对象强制转换为类型“ItemList”

    出于某种原因 我的老板喜欢创建自定义类型来表示通用列表 即使在大多数情况下 他的自定义类型没有成员 我认为他只是懒惰 不喜欢输入列表或其他内容 但对我来说这是蹩脚的 并且让我对下面的问题感到非常头痛 情况要点 public class It
  • spring data jpa多重排序

    我正在使用 spring data jpa 和 JQGrid 我需要基于多个排序参数的响应 我尝试使用 sort parameter column a column b 和 sort order asc 但出现异常 pojo 中没有找到属性
  • 禁用 PDFView 上的缩放 (iOS)

    如何禁用 PDFView 的缩放功能 我已经尝试过解决方案here https stackoverflow com questions 54829190 how to disable zoom in and zoom out in pdfv
  • 为什么 object 不默认为零?

    在 Delphi 中 从 TObject 继承的变量的记录行为是默认值 nil 然而 我遇到过一种情况 情况并非如此 通过 IDE F9 运行以下代码示例会产生混合结果 var objTemp TMemDataSet begin if ob
  • 有没有办法使用 Django REST 框架中的可浏览 API 上传文件?

    我需要测试一个上传文件的 API 如何通过可浏览的 API 执行此操作 可浏览的 API 页面如下所示 有没有办法使用这个接口上传文件 views py class TrainingData APIView API for getting
  • 从图像创建视频会对某些图像格式产生黑屏视频[重复]

    这个问题在这里已经有答案了 我正在使用下面的命令从图像创建视频 该命令适用于大多数图像 但对于 png 图像 创建的视频无法播放 我只是得到黑屏 String command new String y f concat safe 0 i s
  • 找不到org.springframework.util.ClassUtils.getMethod并且无法初始化DefaultConversionService

    运行我的应用程序后 它会在控制台中显示以下错误 我研究了这个问题 但它answer https stackoverflow com questions 20851236 spring mvc http status 500 servlet
  • Django 模型管理器是否需要 using=self._db

    在使用 Django 用户模型时 我注意到模型管理器包括using self db作用于数据库时的参数 如果我只使用单个数据库 这有必要吗 什么是using self db除了指定数据库之外 还可以执行其他操作 如果添加另一个数据库 这是否
  • gdb 回溯

    我刚刚尝试过使用 gdb回溯Linux http www backtrack linux org 我必须说这太棒了 我想知道 backtrack 中的 gdb 是如何配置为这样的 当我设置断点时 会打印所有寄存器值 堆栈的一部分 数据部分的
  • 适用于 Android 的 Google 环聊 API

    您知道如何将 Google Hangout 集成到 Android 应用程序中吗 我没有看到任何当前可用的 API 使用 WebView 是一种选择吗 目前没有任何内容 我不相信 WebView 版本会起作用 因为环聊需要谷歌安装的相机插件
  • Python Fizzbuzz 循环问题

    我已经搜索了大约一个小时的答案 似乎大多数人都以与我不同的方式编码 fizzbuzz 然而 在尝试了一切方法来找出为什么这个简单的代码不起作用之后 我感到非常沮丧 谁能指出我确定遇到的简单问题 代码运行但只返回值 1 def fizzbuz
  • Android L Nexus 5 上的材料设计

    我的应用程序在 Android L 上崩溃 但在 Android Kitkat 上运行 布局上也没有 RippleDrawable 这是异常和布局 XML 布局
  • ocaml 命令行找不到“topfind”

    我已经安装了顶级 并且有 OCAML TOPLEVEL PATH 设置 export OCAML TOPLEVEL PATH Users smcho opam system lib toplevel 我检查该目录是否存在 并且有一个文件to
  • 在 strpos() 的字符串中使用正则表达式

    我想让脚本搜索 open email msg 不同的电子邮件将有不同的信息 但格式相同 如下所示 我并没有真正使用正则表达式太多 但我想做的是每当我用它来搜索字符串时 它都会搜索 标题 标题数据 类别 类别数据 我问因为我不认为类似的事情
  • 无法找到 Python PIL 库。Google App Engine

    完美安装了Google App Engine SDK Python 2 6 想要进入图像并在本地进行测试 已安装 PIL 安装了Python 然后运行了PIL安装 这次成功了 事情看起来不错 但尝试进行本地主机图像处理 给出 NotImpl
  • Node Puppeteer, page.on( "request" ) 抛出“请求已处理!”

    我在用着puppeteer extra https www npmjs com package puppeteer extra和 node js 来迭代多个 url 我试图拦截一些资源类型以在每次迭代时加载 并收到以下错误 PS C Use
  • ios 中的阴影

    iOS 中如何去掉物体的阴影 My object is UIImageView and i want to drop an elliptical shadow Please refer image for reference 最好使用另一张
  • 使一个流的输出成为另一个流的输入的最佳方法是什么

    我想知道除了使用字节缓冲区和循环之外 是否有更好 内置的方法从一个流读取并将其写入另一个流 在 NET 中 通常 这样做是为了将转换应用于流并将其继续移动 在本例中 我正在加载一个文件 将其放入 deflate 流并将其写入文件 为简单起见