1. 流的抽象基类Stream:Stream 是所有流的抽象基类。流是字节序列的抽象概念,例如文件、输入/输出设备、内部进程通信管道或者 TCP/IP 套接字。Stream 类及其派生类提供这些不同类型的输入和输出的一般视图,使程序员不必了解操作系统和基础设备的具体细节。根据基础数据源或储存库,流可能只支持这些功能中的一部分。通过使用 CanRead、CanWrite 和 CanSeek 属性,应用程序可以查询流的功能。Read 和 Write 方法读写各种不同格式的数据。对于支持查找的流,使用 Seek 和 SetLength 方法以及 Position 和 Length 属性可查询和修改流的当前位置和长度。有些流实现执行基础数据的本地缓冲以提高性能。对于这样的流,Flush 方法可用于清除所有内部缓冲区并确保将所有数据写入基础数据源或储存库。在 Stream 上调用 Close 将刷新所有经过缓冲处理的数据,本质上是为您调用了 Flush。Close 也会释放操作系统资源,如文件句柄、网络连接或用于任何内部缓冲的内存。
  2. 继承自抽象基类Stream的流按功能可分为基流功能流

    1)   基流指有实际的数据源的流,它们封装了从实际数据源读取或写入数据的方法,这样实际使用中就不用考虑与底层比如文件系统,网络连接等怎么打交道。

      .net框架中的基流有如下几种:

  • FileStream:以文件作为数据源,在构造FileStream的对象实例时,都要指明要读取或写入的文件(FileStream的构造函数都要指明文件的路径)。
  • NetworkStream:以网络连接作为数据源,在构造NetworkStream的对象实例时,都要指明要操作的Socket(NetworkStream的构造函数都要有  Socket)。
  • MemoryStream:以内存字节流作为数据源,MemoryStream可以以非空字节流数组作为数据源,也可以使用空数组。当使用非空字节数组时,虽然根据传递到构造函数中的参数可能能够修改现有内容,但既不能追加也不能收缩流。空内存流是可调整大小的,而且可以向其写入和从中读取。

    2)   功能流是对基础流提供一定功能比如压缩解压缩、加密解密的流,功能流必须要有基础流(即在构造功能流的对象实例时,都要指明基础流)。基础流可以是基流或者功能流,也就是说可以将基流附加到一个或多个提供所需功能的功能流从而形成传递流

      .net框架中的功能流有如下几种:

  • DeflateStream、GZipStream:压缩与解压缩流。
  • BufferedStream:缓冲流。
  • CryptoStream:加密解密流。

  3. 流的读写

    1).流自身有Read和Write方法,但流自身的Read和Write方法都是直接对字节数组操作,即使用流自身的Read和Write方法前都要将要准备好字节数组,Read方法要准备好byte[]存储从流中读取的数据,Write方法要准备好要写入流中的byte[]。

    2).根据读写操作处理的数据单位不同,可分为:字节(或二进制)读取器,字节(或二进制)编写器,字符读取器,字符编写器。在构造读取器或编写器的对象实例时,都要传入要操作的流或者能构造出流的参数如文件路径。

    对流按照字节进行读写(用特定的编码将二进制值读作基元数据类型或以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。):

     BinaryReader、BinaryWriter

    对流按照字符进行读写(以一种特定的编码从字节流中读取字符或将字符转化为特定编码写入流):

     StreamReader、StreamWriter

参考:

  • http://shitouer.cn/2012/12/deep-understand-of-java-stream/
  • MSDN

.net stream的更多相关文章

  1. SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)

    前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...

  2. Node.js:理解stream

    Stream在node.js中是一个抽象的接口,基于EventEmitter,也是一种Buffer的高级封装,用来处理流数据.流模块便是提供各种API让我们可以很简单的使用Stream. 流分为四种类 ...

  3. node中的Stream-Readable和Writeable解读

    在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...

  4. nodejs中流(stream)的理解

    nodejs的fs模块并没有提供一个copy的方法,但我们可以很容易的实现一个,比如: var source = fs.readFileSync('/path/to/source', {encodin ...

  5. Node学习笔记(一):stream流操作

    NodeJs中谈及较多的可能就是Stream模块了,先写一个简单的ajax回调 $.post("index.php",{data:'aaa',order:'ccc'},functi ...

  6. Stream

    Stream的好处 1.Stream AP的引入弥补了JAVA函数式编程的缺陷.2.Stream相比集合类占用内存更小:集合类里的元素是存储在内存里的,Stream里的元素是在访问的时候才被计算出来. ...

  7. Stream流

    在Node中,存在各式各样不同的数据流,Stream(流)是一个由不同对象实现的抽象接口.例如请求HTTP服务器的request是一个 流,类似于stdout(标准输出):包括文件系统.HTTP 请求 ...

  8. [LeetCode] Data Stream as Disjoint Intervals 分离区间的数据流

    Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen ...

  9. [LeetCode] Moving Average from Data Stream 从数据流中移动平均值

    Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...

  10. [LeetCode] Find Median from Data Stream 找出数据流的中位数

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

随机推荐

  1. wampserver配置域名

    装载自http://blog.csdn.net/znb26/article/details/51204313

  2. 用ARCGIS配出一张DEM专题图

    专题图是指突出而尽可能完善.详尽地表达制图区内的一种或几种自然或社会经济要素的地图.专题图的制图领域宽广,凡具有空间属性的信息数据都可以用其来表示.由于DEM描述的是地面高程信息,它在测绘.水文.气象 ...

  3. VS Code 相关

    TSLint tslint 'src/**/*.ts?(x)' 运行发现目录下所有ts文件有没有问题 VSCode 按F1 输入ext install tslint Link 有一些lint可以aut ...

  4. Kolmogorov 的数学观与业绩

    https://www.douban.com/group/topic/11395706/ 作者:伊藤清 当我得知苏联伟大的数学家,84岁的 Andreyii Nikolaevich Kolmogoro ...

  5. 《Benign and maligenant breast tumors classification based on region growing and CNN segmentation》翻译阅读与理解

    注明:本人英语水平有限,翻译不当之处,请以英文原版为准,不喜勿喷,另,本文翻译只限于学术交流,不涉及任何版权问题,若有不当侵权或其他任何除学术交流之外的问题,请留言本人,本人立刻删除,谢谢!! 另:欢 ...

  6. BAT的面试经验_摘抄

    一.心态 心态很重要! 心态很重要! 心态很重要! 重要的事情说三遍,这一点我觉得是必须放到前面来讲. 找工作之前,有一点你必须清楚,就是找工作是一件看缘分的事情,不是你很牛逼,你就一定能进你想进的公 ...

  7. jQuery div内容间隔1秒动态向上滚动HTML、JS代码

    demo1: <!DOCTYPE html> <html> <head> <title>div内容间隔1秒动态滚动</title> < ...

  8. java自定义异常(Exception、throws、try-catch)

    一.What is ... 异常处理就是容错处理机制.通过构造一个陷阱来捕获运行时的可预见错误,经对该错误进行适当处理后,让程序能继续运行不至于崩溃. 二.Who will ... 异常由系统环境引发 ...

  9. HTTP权威协议笔记-7.缓存

    7.1 冗余的数据传输 缓存的作用:当客户端每次访问服务器,服务器都会返回一份相同文件,一些相同的字节会不断的在网络内传输,这样冗余的数据传输会耗尽昂贵的带宽,降低传输速度,加重Web服务器的负载. ...

  10. JQuery实现的模块交换动画效果

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...