一、Stream
  什么是stream?(https://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html#no8)

  定义:提供字节序列的一般视图。

  什么是字节序列?
  定义:字节按照一定的顺序进行排序组成了字节序列,字节对象都被存储为连续的字节序列。
  一个字节由8个二进制组成。

  stream类的结构,属性和方法
  构造函数:
  stream类由一个protected类型的构造函数,但是它是个抽象类,无法直接如下使用
  Stream stream = new Stream();
  所以我们自定义一个流继承自Stream看看那些属性必须重写或者自定义:

  1.CanRead:只读属性,判断该流是否能够读取;
  2.CanSeek:只读属性,判断该流是否支持跟踪查找;
  3.CanWrite:只读属性,判断当前流是否可写;
  4.Void Flush():当我们使用流写文件时,数据流会先进入到缓冲区中,而不会立刻写入文件,当执行这个方法后,缓冲区的数据流会立即注入基础流。(使用此方法可以将所有信息从基础缓冲区移动到其目标或清除缓冲区,或者同时执行这种操作。
  当使用StreamWrite或者BinaryWrite类时,不要刷新Stream基对象而应该使用该类的Flush或Close方法,此方法确保首先将该数据刷新至基础流,然后再将其写入文件。
  5.Length:表示流的长度
  6.Position属性:虽然从字面中可以看出这个Position属性只是标示了流中的一个位置,当Stream对象被缓存了,会导致Position属性在流中无法找到正确的位置,解决方案:用Using语句将流对象包裹起来,用完之后关闭回收即可。(using()语句会自动回收)

二、File
  提供用于创建、复制、删除、移动和打开单一文件的静态方法,并协助创建 FileStream 对象。
  继承 Object->File
  方法:
  AppendAllLines(String Filepath, IEnumerable<String> content) FilePath: 需要追加内容的文件 content:需要追加的行File.AppendAllText(String filepath,String content,Encoding) 将指定的字符串追加到文件中,如果文件还不存在则创建该文件encoding 字符编码
  public static System.IO.StreamWriter AppendText (string path);返回StreamWriter一个流写入器,它将 UTF-8 编码文本追加到指定文件或新文件。 创建一个StreamWriter,它将 UTF-8 编码文本追加到现有文件或新文件(如果指定文件不存在)
  public static void Copy (string sourceFileName, string destFileName);sourceFileName 要复制的文件。destFileName 目标文件的名称,它不能是一个目录或现有文件.
  public static System.IO.FileStream Create (string path);//path要创建的文件的路径及名称。返回一个FileStream,它提供对 path 中指定的文件的读/写访问。

eg.  

using (FileStream fs = File.Create(path))
  {
    Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
    // Add some information to the file.
    fs.Write(info, 0, info.Length);
  }

  public static System.IO.FileStream Create (string path, int bufferSize);//path要创建的文件的路径及名称 bufferSize Int32用于读取和写入到文件的已放入缓冲区的字节数。返回FileStream一个具有指定缓冲区大小的 FileStream,它提供对 path 中指定的文件的读/写访问。
  public static System.IO.FileStream OpenRead (string path);//打开文件进行读取,返回FileStream指定路径上的只读FileStream。
  public static void Move (string sourceFileName, string destFileName);//文件移动,从sourceFileName移动到destFileName

三、FileStream
  为文件提供stream,既支持同步读写又支持异步读写。是对文件的操作,继承自Stream。
  方法:
  public FileStream(string path, FileMode mode, FileAccess access);
  path指明文件所在的路径信息;
  mode是FileMode的枚举值,表示文件打开或创建的方式
  CreateNew:指定操作系统应创建新文件,如果文件已经存在,则引发IOException;
  Create:指定操作系统应创建新文件,如果文件已经存在,它将被覆盖;
  Open:指定操作系统应打开现有文件,如果文件不存在,则引发FileNotFoundException;
  OpenOrCreate:指定操作系统应打开文件,如果文件不存在,则创建新文件;
  Truncate:指定操作系统应打开现有文件,文件一旦打开,就将截断为零字节大小;
  Append:打开先有文件并把Position设置至文件尾,如果文件不存在将创建新文件。Append只能同FileAccess.Write一起使用

  access是FileAccess的枚举值,它控制对文件的访问权限
  Read:打开文件用于只读;
  Write:打开文件用于只写;
  ReadWrite:打开文件,用于读写;
  //创建新文件
  FileStream fileStream = new FileStream(@"d:\test.txt", FileMode.Create);
  //读取
  FileStream fileStream= new FileStream(@"d:\test.txt", FileMode.Open);
  FileStream fs=File.OpenRead(@"c:\file.txt"); //这样是返回只读文件流。
四、MemoryStream
  和文件流不同,MemoryStream类表示的是保存在内存中的数据流,由内存流封装的数据可以在内存中直接访问。内存一般用于暂时缓存数据以降低应用程序对临时缓冲区和临时文件的需要。
  相关用法:

  MemoryStream ms = new MemoryStream();
  byte[] buffer = new byte[stream.Length];
  stream.Position = 0;
  int arrbyte = stream.Read(buffer, 0, buffer.Length);
  ms.Write(buffer, 0, arrbyte);

  FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(FilePath), FileMode.Create);

  //写入流文件
  ms.WriteTo(fs);

  //清空内存
  ms.Close();
  fs.Close();
  fs = null;
  ms = null;

stream,file,filestream,memorystream简单的整理的更多相关文章

  1. Stream、FileStream、MemoryStream的区别

    1.Stream:流,在msdn的定义:提供字节序列的一般性视图,Stream提供了读写流的方法是以字节的形式从流中读取内容.而我们经常会用到从字节流中读取文本或者写入文本,微软提供了StreamRe ...

  2. 【.Net】Byte,Stream,File的转换

    引言      文件的传输和读写通常都离不开Byte,Stream,File这个类,这里我简单封装一下,方便使用. 帮助类     public static class FileHelper { / ...

  3. <正则吃饺子>:关于java中对内存部分的简单总结整理

    在项目和一些群讨论中,经常看到对内存的处理,但是,自己确是一知半解的,基于此,就把这部分的知识简单的整理了下,知识点来源于网络博文,也一一标明出处,谢谢. package com.love.malin ...

  4. C# 流与文件(Stream & File & byte[])

    原文:https://www.cnblogs.com/long-gengyun/archive/2010/03/28/1698681.html 文件概述  文件在操作时表现为流,即流是从一些输入中读取 ...

  5. File FileStream StreamReader StreamWriter C#

    存在各种各样的IO设备,比如说文件File类(字符串文件和二进制文件),可以直接使用File类对文件进行读写操作. 这些各种IO的读取和写入是通过流的形式实现的,基类为Stream,针对各种不同的IO ...

  6. 20151024_003_C#基础知识(File / FileStream / StreamReader/StreamWriter)

    1:绝对路径和相对路径 绝对路径:通过给定的路径直接能在我的电脑中找到这个文件. 相对路径:文件相对于应用程序的路径. 2:编码格式 乱码:产生乱码的原因,就是你保存这个文件所采用的编码,跟你打开这个 ...

  7. BufferHelp byte[] Stream string FileStream Image Bitmap

    /******* * *** ***** ** ** * * * * * * * * ***** * * * * * * * * * * * * * * * ******* *** * ***** * ...

  8. C# FileStream MemoryStream BufferedStream StreamReader StreamWriter

    FileStream读取文件 , array.Length);//读取流中数据把它写到字节数组中file.Close();//关闭流string str =Encoding.Default.GetSt ...

  9. Java Stream File & IO

    摘录自:http://www.runoob.com/java/java-files-io.html Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需 ...

随机推荐

  1. java 泛型的类型擦除与桥方法

    泛型类 --代码参考:java核心技术 卷1 第十版 public class Pair<T> { private T first; private T second; //构造器 pub ...

  2. 安卓开发笔记(三十一):shape标签下子类根结点的具体使用

    在我的上一篇博文当中阐述了我们如何使用shape标签进行自定义控件,这里对shape控件的属性进行阐述,不知道如何使用这些属性的可以参见我的上一篇博文(自定义Button):https://www.c ...

  3. webpack Code Splitting浅析

    Code Splitting是webpack的一个重要特性,他允许你将代码打包生成多个bundle.对多页应用来说,它是必须的,因为必须要配置多个入口生成多个bundle:对于单页应用来说,如果只打包 ...

  4. .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger)

    上接:.NetCore WebApi——Swagger简单配置 任何项目都有权限这一关键部分.比如我们有许多接口.有的接口允许任何人访问,另有一些接口需要认证身份之后才可以访问:以保证重要数据不会泄露 ...

  5. [翻译 EF Core in Action 1.6]你的第一个EF Core应用程序

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  6. 我学Java我傲娇

    今天,终于把学习了一年多的<Java核心技术36讲>第一遍完结了,历时一年多,花出去的钱终于感觉有了第一笔回报. 这是我在极客时间的第一门付费课程,刚出来的时候,正巧自己转到全职Java开 ...

  7. winfrom 图片等比例压缩

    效果图: 核心代码: /// <summary> /// 等比例缩放图片 /// </summary> /// <param name="bitmap" ...

  8. 有人WIFI模块使用详解

    补充 模块在连接路由器时如果希望模块固定IP 不过发现固定IP之后好像连接路由器的等待时间增加了 用的这一款 看一下现在可能用到了引脚 这个模块也有三种模式AP,STA,AP+STA 先说一下模块在A ...

  9. 华为云提供针对Nuget包管理器的缓存加速服务

    在Visual Studio 2013.2015.2017中,使用的是Nuget包管理器对第三方组件进行管理升级的.而且 Nuget 是我们使用.NET Core的一项基础设施,.NET的软件包管理器 ...

  10. Redux进阶(一)

    State的不可变化带来的麻烦 在用Redux处理深度复杂的数据时会有一些麻烦.由于js的特性,我们知道当对一个对象进行复制时实际上是复制它的引用,除非你对这个对象进行深度复制.Redux要求你每次你 ...