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. 并发读写缓存实现机制(一):为什么ConcurrentHashMap可以这么快?

    大家都知道ConcurrentHashMap的并发读写速度很快,但为什么它会这么快?这主要归功于其内部数据结构和独特的hash运算以及分离锁的机制.做游戏性能很重要,为了提高数据的读写速度,方法之一就 ...

  2. win10 自动亮度关闭无效问题

    升级win10后,发现系统的关闭自动亮度功能无效了,怎么调整都没有效果,百度把,服务也关了,电源管理也关了,自己的显卡节电设置也关了,最后摸索,只要把电池状态下,和通电状态下的屏幕亮度都调整到50%以 ...

  3. zxing--条码图像处理库

    ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口.Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码.   该项目可实现的条形码 ...

  4. linux chmod 755

    chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限. 一般是三个数字: 第一个数字表示文件所有者的权限 第二个数字表示与文件所有者同属一个用户组的其他用户的权限 第三个数 ...

  5. 无线路由!RTS DTIM阈值、Beacon 周期如何设置多少可以加快路由

    无线路由!RTS DTIM阈值.Beacon 周期如何设置多少可以加快路由 DTIM阈值是使用无线路由器时无线发送数据包的频率.1间隔最低,255最高[1]  但是想要使连接的设备达到最高运行速度,调 ...

  6. 我读汤姆大叔的深入理解js(一)

    前言 闲来看看javascript,在圆子里发现了汤姆大叔的文章,先是整体瞄了几眼,感觉不错,然后细细研读.记录下自己的学习历程和个人理解.更重要的是作为笔记 高质量JS代码 在看汤姆大叔的这一系列文 ...

  7. 预加载 img 的方式。

    原生方式: var img = new Image(); img.onerror = function() { alert('img error'); }; img.onload = function ...

  8. MFC 对话框响应OnChar()

    最近在写程序时,出现了对话框里面不接收键盘消息的情况,特别搜索了以下内容 MFC中对话框是不会直接响应OnChar和OnKeyDown消息的,会被 其它控件拦截,测试时发现不会进入这两个函数,必须重定 ...

  9. [软件工程] 查找二维数组最大子数组的之和 郭莉莉&李亚文

    一. 在主函数中实现二维数组的输入. 代码主要函数maxson(),主要利用for()循环先查找出最大字数组的四角的坐标xmin,xmax,ymin,ymax来确定最大子数组, 在循环中算出之和,编写 ...

  10. flash开发几个问题

    1.跨域请求xml或txt 问题,使用URLLoader,不能跨域使用 2.js和swf交互问题,尽量使用swfobject.js动态创建