一、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. appium---【已解决】【Mac】如何查看java的安装路径及JAVA_HOME环境变量的配置

    报错截图:根据提示可以看出,JAVA_HOME的环境变量配置错误,需要重新配置. 1.查看Java版本 打开mac电脑,查看java版本,打开终端Terminal,通过命令查看java的版本 Luck ...

  2. 关于DatePicker在模态窗体下失效的问题

    最近用bootstrap做了一个租赁相关的管理系统,由于前端知识薄弱,也是编查资料边做.关于一些控件的用法,也是从网上查资料.下面,来说一下在写前端页面时遇到的几个坑. 这个系统中,日期控件用的是Da ...

  3. 全面理解 javascript 的 argements caller callee call apply 之caller

    /** * 演示arguments的用法,如何获取实参数和形数数 */ function argTest(a,b,c,d){ var numargs = arguments.length; // 获取 ...

  4. mpvue 小程序开发爬坑汇总

    <!-- 小程序的爬坑记录 --> 1 微信小程序之动态获取元素宽高 var obj=wx.createSelectorQuery(); 2 微信小程序图片自适应 <image cl ...

  5. Adobe Photoshop CC 2019 for Mac v20.0.4 中文版安装教程

    全新Adobe Photoshop CC 2019 mac特别版终于上线了,简称ps cc 2019,Adobe Photoshop CC 2019 for Mac v20.0.4 中文版安装教程分享 ...

  6. vue项目使用websocket技术

    一.为什么需要websocket? 前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中.如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷. 因此,一种新 ...

  7. SpringBoot + Spring Security 学习笔记(五)实现短信验证码+登录功能

    在 Spring Security 中基于表单的认证模式,默认就是密码帐号登录认证,那么对于短信验证码+登录的方式,Spring Security 没有现成的接口可以使用,所以需要自己的封装一个类似的 ...

  8. Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)

    本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置.教程中也分享了一个简单的CI.CD流程,仅作探讨.不过由于篇幅有限,完整的DevOps,我们后续独立探讨. 为了降 ...

  9. .netcore2.1使用swagger显示接口说明文档

    项目之前开发完接口后,我们还需要写接口说明文档,现在有了swagger方便了很多,可以网页版直接测试,当然了也减少了我们的工作量. 使用swagger生成接口说明文档,大致需要2个步骤 1.从“管理 ...

  10. PageHelper分页异常(java.base/java.util.ArrayList cannot be cast to com.github.pagehelper.Page)

    在SqlMapConfig.xml里面配置分页插件 applicationContext-service.xml里面的配置,我出现问题谁因为,在salSessionFactory里没注入全局配置文件