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. odoo10 入门

    一:入门准备 1:--xmlrpc-port=<端口> 命令选项充许我们将服务器实例的侦听端口从默认8069改为指定端口.这样可以在同一服务器上同时运行多个实例. 2:使用db-filte ...

  2. PopupMenu动态创建菜单

    1.TPopupMenu一条横线在Caption输入一个'-'就可以了.2.在Caption输入名字之后加入一个&就可以不显示快捷键,比如: 退出&  这样退出按钮的快捷键就不会显示出 ...

  3. Java之旅_高级教程_实例_文件操作

    1.文件写入 import java.io.*; public class MainClass{ public static void main(String[] args){ try{ Buffer ...

  4. struct和[]byte的转换,注意结构体内变量首字母一定大写

    type temp struct {     Afd int     Bee string }func main(){ text:=temp{3123,"4234"} b._:=j ...

  5. SpringBoot-@async异步执行方法

    启动加上@EnableAsync ,需要执行异步方法上加入  @Async 在方法上加上@Async之后 底层使用多线程技术 演示代码: @RestController @Slf4j public c ...

  6. List去重问题

    如果集合中的数据类型是基本数据类型,可以直接将list集合转换成set,就会自动去除重复的元素,这个就相对比较简单. public class Test { public static void ma ...

  7. 腾讯互动课堂(Tencent Interact Class,TIC)SDK 词汇表

    词汇表 https://cloud.tencent.com/document/product/266/11732 封装格式 封装格式(Format)是将已经编码压缩好的视频流和音频流按照一定的格式规范 ...

  8. Mysql常用的存储引擎

    存储引擎 存储引擎是表级别的概念,不同的存储引擎保存数据和索引的方式是不相同的. MyISAM存储引擎 MyISAM最典型的性能问题就是表锁的问题.  MyISAM只将数据写到内存中,然后等待操作系统 ...

  9. linux下automake用法

    linux下automake用法 2017年02月06日 09:21:14 阅读数:3684 标签: makemakefilegnulinux   作为Linux下的程序开发人员,大家一定都遇到过Ma ...

  10. [附POC]Apache Struts2最新(CVE-2017-5638,S02-45)POC

    #! /usr/bin/env python # encoding:utf-8 import urllib2 import sys from poster.encode import multipar ...