C# 温故而知新:Stream篇(—)

http://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html

基本概念重点看这一篇。

什么是Stream?

MSDN 中的解释太简洁了: 提供字节序列的一般视图

(我可不想这么理解,这必定让我抓狂,我理解的流是向自然界的河流那样清澈而又美丽,c#中的流也是一样,许多技术或者说核心技术都需要流的帮忙)

那什么是字节序列呢?

其实简单的来理解的话字节序列指的是:

字节对象都被存储为连续的字节序列,字节按照一定的顺序进行排序组成了字节序列

那什么关于流的解释可以抽象为下列情况:

打个比方:一条河中有一条鱼游过,这个鱼就是一个字节,这个字节包括鱼的眼睛,嘴巴,等组成8个二进制,显然这条河就是我们的核心对象:流

*4: void Flush():这点必须说得仔细些:

当我们使用流写文件时,数据流会先进入到缓冲区中,而不会立刻写入文件,当执行这个方法后,缓冲区的数据流会立即注入基础流

MSDN中的描述:使用此方法将所有信息从基础缓冲区移动到其目标或清除缓冲区,或者同时执行这两种操作。根据对象的状态,可能需要修

改流内的当前位置(例如,在基础流支持查找的情况下即如此)当使用 StreamWriter 或 BinaryWriter 类时,不要刷新 Stream 基对象。

而应使用该类的 Flush 或 Close 方法,此方法确保首先将该数据刷新至基础流,然后再将其写入文件。

(红色部分为关键请大家务必能够理解,今后会在相应的章节中介绍)

*9: abstract void Write(byte[] buffer,int offset,int count)

这个方法包含了3个关键的参数:缓冲字节数组,位移偏量和读取字节个数

和read方法不同的是 write方法中的第一个参数buffer已经有了许多byte类型

的数据,我们只需通过设置 offset和count来将buffer中的数据写入流中

*10: virtual void Close()

关闭流并释放资源,在实际操作中,如果不用using的话,别忘了使用完流之后将其关闭

这个方法特别重要,使用完当前流千万别忘记关闭!

C# 温故而知新:Stream篇(

http://www.cnblogs.com/JimmyZheng/archive/2012/03/19/2405216.html#no1

详细介绍了TextReader和StreamReader的定义概念和一些注意事项,

C#--流与文件(Stream & File)(一)

http://www.cnblogs.com/long-gengyun/archive/2010/03/28/1698681.html

  • 流概念 

流是字节序列的抽象概念,如文件的操作,输入/输出设备,内部进行通信的管道等,Stream类及其派生类提供这些不同类型的输入和输出的一般视图,这样的程序员就不必熟悉操作系统和基础设备的具体细节,也可以对流进行操作。

流常用的三个基本操作:

1. 读取流:操作是从流到数据结构的数据传输

2. 写入流:该操作时从数据结构到流的数据传输

3. 流支持查找:查找是对流内的当前位置进行查询与修改

以上三个功能可以通过CanRead ,CanWrite,CanSeek属性进行设置。

Read和Write方法支持读写各种不同格式的数据。对于支持查找功能的流,可以使用Seek和SetLength方法以及Length和Position属性查询和修改流当前的位置和长度。

有些流实现执行数据的本地缓冲以提高性能。对于这样的流,Flush方法可用于清除内部缓冲区并确保将所有数据写入数据源或存储器。

在实现Stream的派生类时,必须提供Read和Write方法的实现。异步方法BeginRead,EndRead,BeginWrite和EndWrite通过同步方法Read和Write实现。ReadByte和WriteByte可以实现创建一个新的单元字节数组,然后调用Read和Write实现。

  • 文件概述 

文件在操作时表现为流,即流是从一些输入中读取到的一系列字节。

文件按信息在外部存储器上腭编码方式可以分为文本文件和二进制文件。

Stream类是System.IO命名空间中的一个类,在System.IO命名空间中,包含所有允许在数据流和文件上进行同步和异步读取和写入的类,下面简单介绍一下常用的类。

1. Directory类:包含了所有操作目录的静态方法,如目录的创建,移动,复制,删除等

2. DirectoryInfo类:包含了所有操作目录的实例方法,如目录的各种属性(名字,创建时间),目录的各种操作(目录的创建,是否存在,移动,删除等)

3. File类:是对文件的典型操作,提供文本的创建,打开,复制,删除,移动等静态方法。也可以用于获取文件和设置文件的基本信息。

4. FileInfo类:对文件的典型操作, 提供文本的创建,打开,复制,删除,移动等实例方法。当文件需要多次重用时,使用FileInfo类提供的实例方法,不可以使用File提供的静态方法。

5. FileStream类:该类实现了对文件读取,写入,打开,关闭操作,支持随机访问文件,可以使用同步方式打开文件进行读写,也可以用异步方式打开文件进行读写。

6. Path类:该类对包含文件或目录路径信息的String实例操作,这些操作可以跨平台的方式执行的。

7. MemoryStream类:该类创建起支持存储区为内存的流。

8. StreamReader类:该类可以读取标准文本文件的内容。即实现一个TextReader。默认编码格式为UTF-8。

9. StreamWriter类:该类可以往标准文本文件中写入内容。即实现一个TextWriter。默认编码格式为UTF-8。

10. StringReader类: 该类实现从字符串进行读取的TextReader。

11. StringWriter类:该类实现将信息写入字符串,该信息存储在基础的StringBuilder中。

12. TextReader类:该类表示可读取连续字符系统的阅读器。

13. TextWriter类:该类表示可以编写一个有序字符系列的编辑器,是抽象类。

C#:文件、byte[]、Stream相互转换

http://www.cnblogs.com/warioland/archive/2012/03/06/2381355.html

/// C# Stream 和 byte[] 之间的转换
/// 将 Stream 转成 byte[] public byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(, SeekOrigin.Begin);
return bytes;
} /// 将 byte[] 转成 Stream public Stream BytesToStream(byte[] bytes)
{
Stream stream = new MemoryStream(bytes);
return stream;
}
///Stream 和 文件之间的转换

///将 Stream 写入文件
public void StreamToFile(Stream stream,string fileName)
{
// 把 Stream 转换成 byte[]
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(, SeekOrigin.Begin);
// 把 byte[] 写入文件
FileStream fs = new FileStream(fileName, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bytes);
bw.Close();
fs.Close();
}
///从文件读取 Stream

 public Stream FileToStream(string fileName)
{
// 打开文件
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
// 读取文件的 byte[]
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, , bytes.Length);
fileStream.Close();
// 把 byte[] 转换成 Stream
Stream stream = new MemoryStream(bytes);
return stream;
}

FileStream读写文件【StreamWriter 和 StreamReader】

http://www.cnblogs.com/yank/archive/2007/11/16/961878.html

c#Stream学习笔记的更多相关文章

  1. Stream学习笔记

    1. 创建Stream实例的五种方式 @Test public void test1(){ // 创建Stream对象的第一种方式 List<String> list = Lists.ne ...

  2. java Stream学习笔记

    1.Stream与io无关. 2.Stream和用普通的循环没有太大区别,甚至时间复杂度更高,代码可读性差(通常代码行数更少). 3.流操作就是把循环要做的任务单独抽取出来,最终通过编译在一起. 来看 ...

  3. PHP stream 学习笔记一(同步阻塞 IO 模型)

    原文http://blog.csdn.net/shagoo/article/details/6396089 [root@localhost php]# vi server_one.php <?p ...

  4. JSP学习笔记

    JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...

  5. RAC学习笔记

    RAC学习笔记 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 在学习Re ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  8. Rest API 开发 学习笔记(转)

    Rest API 开发 学习笔记 概述 REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表示方式.获得这些表徵致使这些应用程序转变了其状态.随着 ...

  9. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

随机推荐

  1. LeetCode 476 Number Complement 解题报告

    题目要求 Given a positive integer, output its complement number. The complement strategy is to flip the ...

  2. js中的事件轮询(event loop)机制

    异步任务指的是,不进入主线程.而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行. ...

  3. tomcat端口设置

    在tomcat安装目录下,编辑/conf/server.properties 更改对应的端口: 然后系统重启就可以了.

  4. 重写toString()

    重写Object的toString()之前,得到的结果是  类型 @ 内存地址 demo: package cn.sasa.demo1; public class Test { public stat ...

  5. javascript 实例 静态 公共 私有

    传统 javascript 的原型对象 和 ts的类 对比 传统原型队形说明: //对象构造函数 function Atest(name) { //私有属性,只能在对象构造函数内部使用 var cla ...

  6. mysql 内置功能目录

    mysql 内置功能 视图介绍 mysql 内置功能 视图 使用 mysql 内置功能 触发器介绍 mysql 内置功能 触发器 实验 mysql 内置功能 事务 介绍 mysql 内置功能 存储过程 ...

  7. 中文全文检索讯搜xunsearch安装

    Xunsearch (迅搜)是一套免费开源的专业中文全文检索解决方案,简单易用而且 功能强大.性能卓越能轻松处理海量数据的全文检索.它包含后端索引.搜索服务程序和前端 脚本语言编写的开发工具包(称之为 ...

  8. idea structure窗口

    https://blog.csdn.net/qq_19934363/article/details/87994000

  9. python创建有序字典及字典按照值的大小进行排序

    有序字典 在Python中,字典类型里面的元素默认是无序的,但是我们也可以通过collections模块创建有序字典 # -*- coding:utf-8 -*- # python有序字典需导入模块c ...

  10. 如何为DigitalOcean上的服务器配置SSH密钥

    本指南适用于mac OS和Linux,windows用户请绕道. 通常,当你启动DigitalOcean droplets时,只要过程完成,你会收到一封电子邮件,让你知道droplets的IP地址和密 ...