stream,file,filestream,memorystream简单的整理
一、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简单的整理的更多相关文章
- Stream、FileStream、MemoryStream的区别
1.Stream:流,在msdn的定义:提供字节序列的一般性视图,Stream提供了读写流的方法是以字节的形式从流中读取内容.而我们经常会用到从字节流中读取文本或者写入文本,微软提供了StreamRe ...
- 【.Net】Byte,Stream,File的转换
引言 文件的传输和读写通常都离不开Byte,Stream,File这个类,这里我简单封装一下,方便使用. 帮助类 public static class FileHelper { / ...
- <正则吃饺子>:关于java中对内存部分的简单总结整理
在项目和一些群讨论中,经常看到对内存的处理,但是,自己确是一知半解的,基于此,就把这部分的知识简单的整理了下,知识点来源于网络博文,也一一标明出处,谢谢. package com.love.malin ...
- C# 流与文件(Stream & File & byte[])
原文:https://www.cnblogs.com/long-gengyun/archive/2010/03/28/1698681.html 文件概述 文件在操作时表现为流,即流是从一些输入中读取 ...
- File FileStream StreamReader StreamWriter C#
存在各种各样的IO设备,比如说文件File类(字符串文件和二进制文件),可以直接使用File类对文件进行读写操作. 这些各种IO的读取和写入是通过流的形式实现的,基类为Stream,针对各种不同的IO ...
- 20151024_003_C#基础知识(File / FileStream / StreamReader/StreamWriter)
1:绝对路径和相对路径 绝对路径:通过给定的路径直接能在我的电脑中找到这个文件. 相对路径:文件相对于应用程序的路径. 2:编码格式 乱码:产生乱码的原因,就是你保存这个文件所采用的编码,跟你打开这个 ...
- BufferHelp byte[] Stream string FileStream Image Bitmap
/******* * *** ***** ** ** * * * * * * * * ***** * * * * * * * * * * * * * * * ******* *** * ***** * ...
- C# FileStream MemoryStream BufferedStream StreamReader StreamWriter
FileStream读取文件 , array.Length);//读取流中数据把它写到字节数组中file.Close();//关闭流string str =Encoding.Default.GetSt ...
- Java Stream File & IO
摘录自:http://www.runoob.com/java/java-files-io.html Java 流(Stream).文件(File)和IO Java.io包几乎包含了所有操作输入.输出需 ...
随机推荐
- java JDK配置环境变量
1)将下载的jdk放置到一定文件夹中,注意文件夹名不能有中文! 2)设置环境变量 a.可以在系统变量中找到path这个变量,然后将jdk下的bin的根目录添加进去 注意:一定要放在path变量值的最前 ...
- Java 11 新功能来了!
关键时刻,第一时间送达! 目前 Oracle 已经发布了 Java Development Kit 10,下个版本 JDK 11 也即将发布.本文介绍 Java 11 的新功能. 根据Oracle新出 ...
- ReentrantLock之公平锁源码分析
本文分析的ReentrantLock所对应的Java版本为JDK8. 在阅读本文前,读者应该知道什么是CAS.自旋. 本文大纲 1.ReentrantLock公平锁简介 2.AQS 3.lock方法 ...
- Javascript的内存泄漏分析
作为程序员(更高大尚的称谓:研软件研发)的我们,无论是用Javascript,还是.net, java语言,肯定都遇到过内存泄漏的问题.只不过他们都有GC机制来帮助程序员完成内存回收的事情,如果你是C ...
- 通过JDK常用工具监控Java进程的内存占用情况
目录 1 JDK 工具的使用 2 查看 GC 日志信息 3 添加 JMS 远程监控 Tomcat是一款常用的Web容器, 它是运行在 JVM(Java Virtual Machine) 中的一个Jav ...
- 『开源』扩展 JS 的 Date 处理函数
背景: JS 有自己的 时间类型 Date —— 但是,在某些情况下 这个对象似乎 不太好用. 本文 基于 JQuery 扩展了一些 JS日期函数,包括: > 字符串 转 Date 对象 万 ...
- Spring Boot Web 自定义注解篇(注解很简单很好用)
自从spring 4.0 开放以后,可以添加很多新特性的注解了.使用系统定义好的注解可以大大方便的提高开发的效率. 下面我贴一段代码来讲解注解: 通过小小的注解我们支持了以下功能: 使 spring. ...
- 我敢说你不一定完全理解try 块,catch块,finally 块中return的执行顺序
大家好,今天我们来讲一个笔试和面试偶尔都会问到的问题,并且在工作中不知道原理,也会造成滥用. 大家可能都知道,try 块用来捕获异常,catch块是处理try块捕获的异常,finally 块是用来关闭 ...
- Centos7 nginx 虚拟主机、反向代理服务器及负载均衡,多台主机分离php-fpm实验,之强化篇,部署zabbix为例
一.简介 1.由于zabbix是php得,所有lnmp环境这里测试用的上一个实验环境,请查看https://www.cnblogs.com/zhangxingeng/p/10330735.html : ...
- 设计模式 | 策略模式(strategy)
参考:https://www.cnblogs.com/lewis0077/p/5133812.html(深入解析策略模式) 定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相 ...