不论何种类型的文件都可以表示为一个字节数组。(Byte[])

一、文件复制 (示例)

首先建立一个类似管道的东西将文件和内存中的程序连接,并将文件按字节发送。
为了保存接收到的文件字节,需要创建一个字节数组。完成传递后,文件就以字节数组的方式保存在了内存中。

接下来再将内存中的字节数组保存到文件中,过程与前述正好相反。

在C#中,流被实现为Stream类及一系列的子类,同时还有一些装饰类和帮助类。流的最主要用途就是与应用程序外部的文件或数据源进行数交互。比如,在访问文件时,有文件流(FileStream);在访问网络时,有网络流(NetworkStream)。

不论何种类型的流,都继承自基类Stream,因此它们的使用方式基本是一致的。

示例代码:

Stream source = new FileStream(@"c:\a.bmp",FileMode.Open,FileAccess.Read);
byte[] buffer = new byte[source.Length];
int byteRead = source.Read(buffer, , (int)source.Length); Stream target = new FileStream(@"c:\b.bmp", FileMode.Create, FileAccess.Write);
target.Write(buffer, , buffer.Length);
target.Dispose();

二、文件复制(大文件复制示例)

当传递一个大文件,或者无法知道文件大小时,采用分批读取和写入,每次只读取部分字节,直到文件尾。

示例代码:

int buffersize = ;//每次读10KB;
Stream source = new FileStream(@"c:\abc.exe", FileMode.Open, FileAccess.Read);
Stream target = new FileStream(@"c:\aa.exe", FileMode.Create, FileAccess.Write); byte[] buffer = new byte[buffersize];
int bytesRead;
do
{
bytesRead = source.Read(buffer, , buffersize);
target.Write(buffer, , bytesRead);
} while (bytesRead > ); source.Dispose();
target.Dispose();

流的类型体系

流的类型体系包括基础流,装饰器流,包装器类,帮助类。

一、基础流

C#系列之{流和序列化}的更多相关文章

  1. 图解Janusgraph系列-图数据底层序列化源码分析(Data Serialize)

    图解Janusgraph系列-图数据底层序列化源码分析(Data Serialize) 大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 整理所有图相关文章,请移步 ...

  2. 笔记:I/O流-对象序列化

    Java 语言支持一种称为对象序列化(Object Serialization)的非常通用的机制,可以将任何对象写入到流中,并在之后将其读回,首先需要支持对象序列化的类,必须继承与 Serializa ...

  3. Java 基础 IO流之序列化

    一,前言 在前面的IO中,我们都是讲数据以字符串的形式保存.能不能将一个数组保存到文件呢,当取出数据时也是一个数组,如果能够实现那就完美了.我们都知道比较通用的有JSON格式的序列化,那java中也有 ...

  4. IO流的序列化和反序列化

    序列化和反序列化的概念: 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 序列化和反序列化的使用: java.io ...

  5. .NET基础 (10)流和序列化

    流和序列化1 什么是流,.NET中有哪些常见的流2 如何使用压缩流3 Serializable特性有何作用4 .NET提供了哪几种可进行序列化操作的类型5 如何自定义序列化和反序列化的过程 流和序列化 ...

  6. day010-缓冲流、转换流、序列化流

    1.     缓冲流 又称为高效流.高效流高效的原理:使用缓冲区(数组)临时存储多个数据,减少底层资源的调用次数.从而提高读写速度. 1.1 缓冲流分类 字节缓冲流: BufferedOutputSt ...

  7. Java对象流与序列化学习

    对象流与序列化 对象流有两个类 ObjectOutputStream:将java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutp ...

  8. javaSE学习笔记(15) ---缓冲流、转换流、序列化流

    javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...

  9. 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】

    day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能 ...

  10. 383 day10缓冲流、转换流、序列化流

    day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 [ ] 能够使用字节缓冲流读取数据到程序 [ ] 能够使用字节缓冲流写出数据到文件 [ ] 能够明确字符缓 ...

随机推荐

  1. python基础之socket编程 (转自林海峰老师)

    python基础之socket编程   阅读目录 一 客户端/服务器架构 二 osi七层 三 socket层 四 socket是什么 五 套接字发展史及分类 六 套接字工作流程 七 基于TCP的套接字 ...

  2. TF30063:没有访问xxx的权限 vs2017

    凭据什么的都删掉了,还是无法连接上,最后同事用一种方法o(╥﹏╥)o,先登录vs2015的tfs账号,然后再vs2017上面登录tfs账号即可解决.PS:网上很多文章都是抄的,这个Bug真TM恶心.

  3. 11. 标准库浏览 – Part II

    第二部分包含了支持专业编程工作所需的更高级的模块,这些模块很少出现在小脚本中. 11.1. 输出格式 reprlib 模块为大型的或深度嵌套的容器缩写显示提供了 :repr() 函数的一个定制版本: ...

  4. BZOJ1791或洛谷4381 [IOI2008]Island

    一道基环树的直径 BZOJ原题链接 洛谷原题链接 又是一道实现贼麻烦的题.. 显然公园其实是基环树森林,求的最长距离其实就是求每一棵基环树的直径的总和. 对于每棵基环树,其直径要么经过环,要么是某个环 ...

  5. CH6202 黑暗城堡

    一道最短路+生成树 原题链接 实际上就是生成树的中每个点到节点\(1\)的距离等于原图中这个点到节点\(1\)的最短距离,求这样的生成树的棵数. 先用\(SPFA\)或\(Dijkstra\)求出所有 ...

  6. 手机端适配方案 媒体查询和flexbale

    方法一 flexible 一.npm 包安装 lib-flexible 淘宝适配方案 px2rem px自动转rem npm install lib-flexible --save npm insta ...

  7. Scrapy框架——CrawlSpider类爬虫案例

    Scrapy--CrawlSpider Scrapy框架中分两类爬虫,Spider类和CrawlSpider类. 此案例采用的是CrawlSpider类实现爬虫. 它是Spider的派生类,Spide ...

  8. VS2010工程结构及其瘦身策略

    VS2010工程结构: 我们以在VS2010上利用MFC创建的单文档应用程序HelloWorld的文件结构为例,简述VS2010应用程序工程中文件的组成结构. 1.解决方案相关文件 解决方案相关文件包 ...

  9. 为什么要用jvm .

    挚享科技 2018.4.8 运行java程序字节码,实现跨平台.. Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成 在Java虚拟机上运行的目标代码(字节码 ...

  10. 通过SD卡来安装Linux系统

    一.制作SD启动卡(安装Linux)步骤: 烧写原理:superboot-6410.bin(bootloader)+内核镜像文件+根文件系统 1.将SD卡插入USB接口的读卡器,并插在PC的USB口 ...