河南网站建设找哪家,互联网销售平台,四平网站建设在线咨询,网络营销推广的要点及注意事项本文章内容主要为数据流及相关辅助类#xff1a;
流(Stream)、文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)、加密流(CryptoStream)以及文本读写的StreamReader、StreamWriter、用于二进制读写的BinaryReader和BinaryWriter类等。
对FileStream、Memor…本文章内容主要为数据流及相关辅助类
流(Stream)、文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)、加密流(CryptoStream)以及文本读写的StreamReader、StreamWriter、用于二进制读写的BinaryReader和BinaryWriter类等。
对FileStream、MemoryStream、NetworkStream有一定的了解即可重点熟练StreaReader、StreamWriter、BinaryReader和BinaryWirter即可。
目录
数据流
数据流的操作
分类
Stream
FileStream
MemoryStream
NetworkStream
CryptoStream
StreamReader
StreamWriter
BinaryReader
BinaryWirter 数据流
数据流data stream是一组有序有起点和终点的字节的数据序列。在C#里数据流提供了一种通用的方式和字节队列进行交互。
数据流的操作
逐字节顺序写入(将数据从内存缓冲传出到外部资源)逐字节顺序读取(将数据从外部数据资源传输到内存缓冲区)随机读写(从某个位置开始逐字顺序读写)
分类
根据数据源的类型(C#语言采用这种方式进行分类)
分为文件流(FileStream)、内存流(MemoryStream)、网络流(NetworkStream)、加密流(CryptoStream)。
根据读写数据的类型
分为字节流和字符流
根据输入输出方向
输入流和输出流
Stream
流在System.IO命名空间下是所有数据流的基类抽象类无法创建实例。
Position获取或设置流当前的位置
Length以字节为单位流的长度
CanWriter当前流是否支持写入
CanTimeout当前流是否超时
CanSeek当前流是否支持查找当CanSeek为false的时候是不允许使用Position属性和调用Seek函数的会抛出异常。
CanRead当前流是否可读
Synckronized根据当前流创建一个线程安全的的流对象
Close关闭流并释放相关资源。
FileStream
文件流在System.IO命名空间下用于对各种类型的文件进行读写。
必须调用Dispose进行资源释放。
创建FileStreamFileStream构造函数之外也可以通过File.OpenWrite和File.OpenRead创建FileStream对象
Flush清除流的缓冲区将已经缓冲的数据写入文件中。
Lock锁定当前流防止其他进程对文件进行读写。
UnLock解除锁定允许其他进程对文件进行读写。
SetLength设置流的长度。
Read读取一个一个字节块并写入给定的缓冲区offset是数组的偏移量coun为读取的字节长度。每当读取一个字节后Position会增加1。放返回值为每次读取到的实际字节数。
Seek设置流的偏移量,offset 偏移量origin是指定偏移量的参考位置开始位置、结束位置、当前位置。
MemoryStream
内存流在System.IO命名空间下对保存在内存中的字节数组进行操作。由于内存流的容量可以自动增长因此在数据加密以及对长度不定的数据进行缓存等场合使用。
Capacity获取或设置为此流分配的字节数
GetBuffer获取流中的无符号字节数组返回的是分配给流空间大小的字节数组(也就是Capacity大小的字节数组)而不是实际占用了的字节数组。
NetworkStream
网络流在System.Net.Sockets命名空间下利用该类可以通过网络发送或接收数据。可以将NetworkStream看作在数据源和接收端之间架设了一个数据通道读取和写入就可以针对通道来进行。
NetworkStream仅支持面向连接的套接字也就是采用TCP协议的连接。
创建NetworkStream构造函数参数为Socket对象或调用TcpClient对象GetStream方法得到NetworkStream
Position网络流无法访问该属性会抛出异常
CanSeek始终返回false
Seek网络流无法调用该函数会抛出异常。
DataAvailable查看缓冲区(数据缓冲区)中是否有数据等待读出。
Write将字节数组从进程缓冲区写入到TCP发送缓冲区Write为同步方法会阻塞线程直到发送成功或返回异常位置。
Read将字节数组从TCP接收缓冲区读出到进程缓冲区调用Read之前应先判断DataAvailable属性是否为true。
CryptoStream
加密流在System.Security.Cryptography命名空间下该类可加密流的方式加密或者解密数据而且只能用于对称加密。
实现任何CryptoStream的任何被加密对象都可以和实现Stream的任何对象链接起来因此一个对象的流式处理输出可以馈送到另一个对象的输入而不需要分别存储中间结果。
Read将需要解密的流写入到字节数组中字节数组是已经解密的。
Write将需要进行加密的流写入到字节数组中字节数组中的数据是已经被加密的。
FlushFinalBlock将内部缓冲区的数据进行写入并清空缓冲区。调用Flush无效。
StreamReader
继承自TextReader在System.IO命名空间下。对文本数据进行读取操作时使用该类。
创建StreamReader构造函数参数使用FileStream、NetworkStream、MemoryStream的对象或使用文件路径。
Close读写完成后必须使用CLose进行流的关闭.
BaseStream获取对应的底层流也就是创建StreamWriter或StreamReader时使用的Stream对象。
CurrentEncoding获取当前流设置的编码格式。
ReadToEnd从底层流的Position开始读取字符到结束为止
EndOfStream获取底层流的Position是否为末尾为止。
StreamWriter
继承自TextWriter在System.IO命名空间下。对文本数据进行写入操作时使用该类。
创建StreamWriter除构造函数外调用File.CreateText、FileInfo.CreateText均可以获取StreamWriter对象。
AutoFlush是否在调用Write函数后自动调用Flush函数将字符缓冲到底层流。
Flush清除当前写入器的所有缓冲区并使任何已缓存的数据变写入底层流。
BinaryReader
在System.IO命名空间下对图像文件、压缩文件等二进制数据进行读取操作时使用该类。
BinaryWirter
在System.IO命名空间下对图像文件、压缩文件等二进制数据进行写入操作时使用该类。