C#系列之{流和序列化}
不论何种类型的文件都可以表示为一个字节数组。(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#系列之{流和序列化}的更多相关文章
- 图解Janusgraph系列-图数据底层序列化源码分析(Data Serialize)
图解Janusgraph系列-图数据底层序列化源码分析(Data Serialize) 大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 整理所有图相关文章,请移步 ...
- 笔记:I/O流-对象序列化
Java 语言支持一种称为对象序列化(Object Serialization)的非常通用的机制,可以将任何对象写入到流中,并在之后将其读回,首先需要支持对象序列化的类,必须继承与 Serializa ...
- Java 基础 IO流之序列化
一,前言 在前面的IO中,我们都是讲数据以字符串的形式保存.能不能将一个数组保存到文件呢,当取出数据时也是一个数组,如果能够实现那就完美了.我们都知道比较通用的有JSON格式的序列化,那java中也有 ...
- IO流的序列化和反序列化
序列化和反序列化的概念: 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 序列化和反序列化的使用: java.io ...
- .NET基础 (10)流和序列化
流和序列化1 什么是流,.NET中有哪些常见的流2 如何使用压缩流3 Serializable特性有何作用4 .NET提供了哪几种可进行序列化操作的类型5 如何自定义序列化和反序列化的过程 流和序列化 ...
- day010-缓冲流、转换流、序列化流
1. 缓冲流 又称为高效流.高效流高效的原理:使用缓冲区(数组)临时存储多个数据,减少底层资源的调用次数.从而提高读写速度. 1.1 缓冲流分类 字节缓冲流: BufferedOutputSt ...
- Java对象流与序列化学习
对象流与序列化 对象流有两个类 ObjectOutputStream:将java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutp ...
- javaSE学习笔记(15) ---缓冲流、转换流、序列化流
javaSE学习笔记(15) ---缓冲流.转换流.序列化流 缓冲流 昨天复习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流.比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化 ...
- 01 语言基础+高级:1-8 File类与IO流_day10【缓冲流、转换流、序列化流】
day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 能够使用字节缓冲流读取数据到程序 能够使用字节缓冲流写出数据到文件 能够明确字符缓冲流的作用和基本用法 能 ...
- 383 day10缓冲流、转换流、序列化流
day10[缓冲流.转换流.序列化流] 主要内容 缓冲流 转换流 序列化流 打印流 教学目标 [ ] 能够使用字节缓冲流读取数据到程序 [ ] 能够使用字节缓冲流写出数据到文件 [ ] 能够明确字符缓 ...
随机推荐
- sqlserver数据库命名规则
sqlserver数据库命名规则: (1)第一个字符必须是字母或“_”.“@”.“#” (2)数据库名称不能是T-SQL的保留字 (3)不允许嵌入空格或其他特殊字符
- better-scroll使用总结
参考:https://zhuanlan.zhihu.com/p/27407024 better-scroll使用小结 核心就是这4个 <script> import BScroll fro ...
- .net中使用XPath语言在xml中判断是否存在节点值的方法
book.xml<?xml version="1.0" encoding="utf-8" ?> <bookstore> <boo ...
- 5D - Rectangles
Given two rectangles and the coordinates of two points on the diagonals of each rectangle,you have t ...
- sublime 注释模版插件DocBlockr的使用
一.gihub地址 https://github.com/spadgos/sublime-jsdocs/ 其中有使用的教程可以参考 二.配置示例 安装教程此处略,请自行查找教程 jsdocs_extr ...
- iOS.ARM-Assembly
ARM Assembly for iOS with Xcode 0. Introduction 0.1 arm asm vs. arm64(ARMv8) asm AArch64: 0.2 __arm6 ...
- Python数据库工具类MySQLdb使用
MySQLdb模块用于连接mysql数据库. 基本操作 # -*- coding: utf-8 -*- #mysqldb import time, MySQLdb ...
- c#比delphi先进的地方
下面是一个例子: using System;namespace HelloWorld{ class Hello{ private static string DateDiff( ...
- Java时代即将来临
Java语言开发成型的时候有一个构想:就是智能设备互联,笔者推断这个时代即将来临. 我们看看信息时代经历的几个阶段: 机械设备阶段--以算盘.机械式计算机为代表的萌芽阶段. 电子管计算机阶段--以简单 ...
- vim窗口切换
参考资料: http://www.cnblogs.com/litifeng/p/8282479.html 当用vim写代码的时候,我喜欢一边看着头文件中结构的定义,一边编写实现的代码,这样就经常用到多 ...