不论何种类型的文件都可以表示为一个字节数组。(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. idea自动生成文档注释

    这方面主要分为两块内容,一是利用idea本身具有的生成模板工具进行生成:二是利用第三方插件生成,比如jindent 后期会进行整理更新,待续 下面的网址目前只是关于这方面的介绍,先留存一份而已 htt ...

  2. avalon 双向绑定在新版chrome中不能同步中文输入

    1>1.x和2.x都有这样的问题,输入中文无法同步到VM,演示地址 http://codepen.io/roscoe054/pen/XXKYMj?editors=1111 chrome 版本 5 ...

  3. Oracle性能优化3-sql优化一定要等价

    做sql优化的前提瞧见是sql等价 1.MAX MIN写法的分与合 drop table t purge; create table t as select * from dba_objects; a ...

  4. Apache Commons configuration使用入门

    使用Commons  Configuration可以很好的管理我们的配置文件的读写, 官网:http://commons.apache.org/configuration 需要用到commons-la ...

  5. PAT 1056 组合数的和(15)(代码)

    1056 组合数的和(15 分) 给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 2 位数字的和.例如给定 2.5.8,则可以组合出: ...

  6. 如何快速学好Shell脚本?

    Shell 语言作为类 Unix 系统的原生脚本,有着非常实用的价值.但对于很多刚刚接触 Shell 脚本的同学来说,搞懂 Shell 语言的语法却是一件非常困难的事情.甚至有人吐槽,或许没有谁能清楚 ...

  7. Linux下查看系统启动 、运行以及安装时间

    1.uptime命令  例子显示已启动13天 当前用户一个 [root@localhost-live version-build-related]# uptime :: up days, :, use ...

  8. ipv6地址累加函数

    #include <stdio.h> #include <arpa/inet.h> int main() { int i; int ret; struct in6_addr a ...

  9. Sort Array By Parity LT905

    Given an array A of non-negative integers, return an array consisting of all the even elements of A, ...

  10. 校园网ipv6连接问题

    没有ipv6的信号:只需要进入网络适配器里面先禁用再启用即可.