- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对.NET中Streams的概念还不是很清楚
例如文件流:
using (FileStream fs = File.Open(C:\temp\Test.txt, FileMode.Open, FileAccess.Write, FileShare.None))
上面的代码为我获取了一个 FileStrem 对象。如果我的理解是正确的,我得到的 FileStream 对象是文件的字节表示C:\temp\Test.txt
我的问题:是否有对文件 C:\temp\Test.txt 的物理引用。
FileStream只是底层文件的字节表示的抽象吗。如果是,那么我可以传递这个 FileStream 对象来表示驻留在其他 Windows 机器上的 Web 服务。
还有什么时候适合使用流。考虑这样一种情况,我需要从某个远程目录读取文件并将其通过 SFTP 传输到某个位置。在这里创建一个 FIleStream 有意义吗?
最佳答案
Stream
类型从根本上说是 I/O 操作的包装器。这就是它的目的。有时会进行一些花哨的缓存,而且肯定有诸如 MemoryStream
之类的东西,它不与任何外部对象对话,但从本质上讲,理论上流是你与那些对话的方式对象。
MSDN has a list继承自 Stream
的 .NET Framework 类型,这太长了,不便包含在这里,但您会注意到,对于其中的大多数,目标是读取或写入来自或来自外部来源,或者在执行这些操作时实时处理其他流。
重要的是要记住,不,流不只是一个字节数组。碰巧字节数组只是从流中读取数据的一种非常好的方式。网络流就是一个很好的例子。如果不通过任何方式打开缓存,您就无法在流中人为地后退或前进——您读取数据,仅此而已。
文件流可以让你跳来跳去,因为磁盘就在你身下做那种事,但由于 NIC 不自己做缓存,网络也不能。
因此,不,您不能将流直接传递给网络服务。本质上,在大多数情况下,流只是指向某些 I/O 操作的指针(实际上是驱动程序)的包装器。如果系统甚至支持它(它无法通过任何简单的方式支持),那么仅发送流就像通过电子邮件向某人发送指向您 C:\驱动器上的文件的链接。
但是,您可以将数据从一个流复制到另一个流。例如,您可以将数据从 FileStream
复制到 NetworkStream
,从而允许您将文件传输到 Web 服务。数据在通过时会被系统缓冲,基本上是从一个流中读取并直接写入另一个流。
为了更好地理解实时数据的概念,请看一个示例。假设您正在从磁盘读取数据。这对硬盘驱动器的工作方式进行了一些 Not Acceptable 或不准确的飞跃,但为了举例,它很简单:您从文件的开头开始,读取 200 个字节。硬盘驱动器读取这 200 个字节,然后停止。然后您要求另外 100 个字节。磁盘旋转,然后停止。这里最值得注意的是,磁盘不会读取所有文件,然后将其传递给您。如果它这样做了,那么是的,字节数组将是一个更好的使用它的工具。
这里的真正目标是保存在内存中的内容。使用流,您可以在内存中处理大量 的数据,实际上是无限的,而不必一开始就将所有数据直接拉入内存。您可以逐 block 阅读它。
我不知道您对 LINQ 或 IEnumerable
一般有多熟悉,但这里的理论是相同的 — 在 LINQ 中,直到您调用一些 ToArray()
或 ToList()
,您的可枚举未被处理。它处于延迟执行状态,等待您使用它。在大多数情况下,这也是流的工作方式。
关于.net - Streams 及其在 .Net 中的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29130783/
我正在尝试实现具有以下签名的方法: public static Pair, Stream> flatten(Iterator, Stream>> iterator); 该方法的目标是将每种流类型展平
我有两个流从两个不同的 api 获取。 Stream get monthOutStream => monthOutController.stream; Stream get resultOutStre
Stream.of(int[])返回 Stream ,而 Stream.of(String[])返回 Stream . 为什么这两种方法的行为不同?两者都应该返回 Stream和 Stream或 St
我正在使用 rxdart在 dart 中处理流的包。我被困在处理一个特殊的问题上。 请看一下这个虚拟代码: final userId = BehaviorSubject(); Stream getSt
我到处都找遍了,还是没弄明白。我知道你可以用流建立两个关联: 用于支持数据存储的包装器意味着作为消费者和供应商之间的抽象层 数据随着时间的推移变得可用,而不是一次全部 SIMD 代表单指令,多数据;在
考虑下面的代码: List l=new ArrayList<>(); l.add(23);l.add(45);l.add(90); Stream str=l.stream
我有一个大型主干/requirejs 应用程序,我想迁移到 webpack,最新的“webpack”:“^4.27.1”,但我遇到了一个我无法解决的错误。 我一直在阅读 https://webpack
我正在使用 xmpp 开发聊天应用程序,根据我们的要求,我们有三台服务器 Apache Tomcat 7、ejabbered 2.1.11 和 mysql 5.5, to run xmppbot on
我知道如何使用 Java 库,并且我可以编写一些循环来执行我需要的操作,但问题更多,为什么 scala.collection.JavaConverters 中没有任何内容或scala.collecti
我正在尝试创建一个单一的衬里,它应该计算一个非常长的文本文件中的唯一单词。独特的词例如:márya fëdorovna scarlet-liveried,...所以基本上都是非英语词。 我的问题是我的
如果我有以下情况: StreamWriter MySW = null; try { Stream MyStream = new FileStream("asdf.txt"); MySW =
有人可以帮我将以下语句转换为 Java8: 我有一个像这样的 HashMap : private Map, List>> someMap; 我想在java8中转换以下逻辑: private Strin
有人可以帮我将以下语句转换为 Java8: 我有一个像这样的 HashMap : private Map, List>> someMap; 我想在java8中转换以下逻辑: private Strin
考虑两种测试方法parallel()和sequential(): @Test public void parallel() throws Exception { System.ou
我是 NodeJS 的新手,我基本上想做的是通过 HTTP 将 .pdf 上传到我的服务器。我正在使用 POST rquest 来处理 Content-Type multipart/form-data
哪个更好:MemoryStream.WriteTo(Stream destinationStream) 或 Stream.CopyTo(Stream destinationStream)?? 我正在谈
给定一个 Stream,我想创建一个新的 Stream,其中的元素在它们之间有时间延迟。 我尝试使用 tokio_core::reactor::Timeout 和 Stream 的 and_then
我是 Kafka Streams 和 Spring Cloud Stream 的新手,但在将集成相关代码移动到属性文件方面已经阅读了有关它的好东西,因此开发人员可以主要专注于事物的业务逻辑方面。 这里
源代码看起来非常相似:pump , pipe .为什么我要使用一个而不是另一个?一个只是另一个的更好版本吗? 最佳答案 Stream.pipe 现在显然是自 0.3.x 以来的首选方法,因此尽可能尝试
我正在寻找是否有更好的方法来解决我不得不使用这些签名的困境(注意:由于 Spock 测试,T[][] 是必需的,我提供 T[][] 作为数据提供商) 我的方法签名是: public T[][] cr
我是一名优秀的程序员,十分优秀!