稍微总结下,System.IO提供了四种类型来实现,对单个文件和计算机目录结构的操作。Directory和File通过静态成员实现建立、删除、复制和移动操作(上图没有提及)。而FileInfo和DirectryInfo类型则通过实例级方法来实现类似的功能,并且更加推荐使用,原因是它们的成员方法返回强类型的对象。

FileStream和StreamReader/StreamWriter的主要区别在于,FileStream操作的是字节/字节数组;而StreamReader/StreamWriter可以操作字符串。

public  void CreateByteFile()
{
var fileInfo = new FileInfo(string.Format(@"{0}\Test.dat", Environment.CurrentDirectory));
using (var fileStream = fileInfo.Open(FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.None))
{
const string msg = "Hello";
var msgAsByteArray = Encoding.Default.GetBytes(msg);
fileStream.Write(msgAsByteArray,0,msgAsByteArray.Length);
fileStream.Position = 0;
Console.WriteLine("Your Message as an array of bytes:\n");
var bytesFormFile = new byte[msgAsByteArray.Length];
for (var i = 0; i < msgAsByteArray.Length; i++)
{
bytesFormFile[i] =(byte) fileStream.ReadByte();
Console.WriteLine(bytesFormFile[i]);
}
Console.WriteLine("\n Decoded Message: ");
Console.WriteLine(Encoding.Default.GetString(bytesFormFile));
}
}
public void WriteCharFile()
{
var fileInfo = new FileInfo(string.Format( "{0}reminders.txt", AppDomain.CurrentDomain.BaseDirectory));
using (var streamWriter = fileInfo.CreateText())
{
streamWriter.WriteLine("Don't forget Mother's Day this year...");
streamWriter.WriteLine("Don't forget Father's Day this year...");
streamWriter.WriteLine("Don't forget These numbers:");
for (var i = 0; i < 10; i++)
{
streamWriter.Write(i + " ");
}
streamWriter.Write(streamWriter.NewLine);
}
Console.WriteLine("Created file and wrote some thoughts...");
Console.ReadKey();
}

StringBuilder,StringWriter,String差异与用途

总觉得,他们很像,感觉做的事情很像,所以查了一下。

1.用Reflector反射看了下StringWriter,发现其还是用StringBuilder干事情。下面是他的Write方法。他里边使用了StringBuilder类的全局变量。同时,他还提供了GetStringBuilder方法,通过这个方法可以获取这个全局变量

private StringBuilder _sb;
public override void Write(string value)
{
if (!this._isOpen)
{
__Error.WriterClosed();
}
if (value != null)
{
this._sb.Append(value);
}
}
StringWriter和StringBuilder的最大差异在于StringWriter继承于TextWriter。可以将StringWriter简单理解为内部存储使用StringBuiler的一个TextWriter的实现类。这样你就可以通过StringWriter来使用TestWriter的API了。(MSDN的神解释:A StringWriter is simply an implementation of TextWriter that uses a StringBuilder internally for storage. So you use StringWriter with APIs that operate on TextWriters.) 2. StringWriter,StringBuilder的另一种描述

StringWriter derives from TextWriter, which allows various classes to write text without caring where it's going. In the case of StringWriter, the output is just into memory. You would use this if you're calling an API which needs a TextWriter but you only want to build up results in memory.

StringBuilder is essentially a buffer which allows you to perform multiple operations (typically appends) to a "logical string" without creating a new string object each time. You would use this to construct a string in multiple operations.

3.StringBuilder,String差异

String 对象串联操作总是用现有字符串和新数据创建新的对象。

StringBuilder 对象维护一个缓冲区,以便容纳新数据的串联。 如果房间可用,新数据追加到缓冲区;否则,新的分配,较大的缓冲区,从原始缓冲区的数据复制到新的缓冲区,并且,新数据并追加到新的缓冲区。

串联操作的性能 String 或 StringBuilder 对象的取决于内存分配的频率。String 串联运算始终分配内存,而 StringBuilder串联运算分配内存,仅当 StringBuilder 对象缓冲区因过小而无法适应新数据。

如果是连接固定的数量的string字符串,建议使用string连接(Use the String class if you are concatenating a fixed number of String objects)。在这种情况下,编译器可能甚至合并单个的串联运算到单个操作(In that case, the compiler may even combine individual concatenation operations into a single operation.)。使用一 StringBuilder 对象是否连接任意字符串;例如,在中,如果使用循环连接随机数用户输入字符串。(Use a StringBuilder object if you are concatenating an arbitrary number of strings; for example, if you're using a loop to concatenate a random number of strings of user input)

.net I/O操作 导图的更多相关文章

  1. [Mindjet MindManager]思维导图的快捷键操作

    来源于:http://www.cnblogs.com/whylaughing/p/5530935.html Mindjet MindManager(思维导图) 快捷键如下: Insert or CTR ...

  2. jQuery中的DOM操作<思维导图>

    DOM是Document Object Model的缩写,意思是文档对象模型.DOM是一种与浏览器.平台.语言无关的接口.使用该接口可以轻松地访问页面中所有的标准组件.简单来说,DOM解决了Netsc ...

  3. jQuery中的DOM操作《思维导图》

    首先,是关于jQuery中的DOM操作的<思维导图>,请点击这里:jQuery中的DOM操作 列表框的左右选项移动 <html> <head> <title& ...

  4. 思维导图FreeMind安装问题及简单使用

    思维导图软件使用的坎坷之路 一直想将思维导图加入到工作环境当中 最开始使用的是 MindManager(http://www.mindmanager.cc/) ,而且感觉利用它制作出来的导图外观也比较 ...

  5. 【干货】jsMind思维导图整合Easyui的右键菜单

    原材料: 1.web版本的JavaScript思维导图(BSD开源协议)[戳这里去官网]. 2.easyui最新版[戳这里去官网]. 这里是原本的jsMind: 在线测试地址 :http://hizz ...

  6. 《HTML重构》读书笔记&思维导图

    最近读了<HTML重构>这本书,以下做出自己的总结归纳,大家可以一起学习交流. 什么是重构?重构是在不改变程序行为的基础上进行小的改动是代码基本逐渐完善的过程,通常需要一些自动化工具的帮助 ...

  7. 跟着9张思维导图学习Javascript

    学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 javascript 相关的思维导图(非原创). 思维导图小tips: 思维导图又叫心智图,是表达发射性思维的 ...

  8. 思维导图MindManager的文件格式与例图

    思维导图软件很多,能够画出思维导图的软件更多.作为流传较广而又比较成熟的思维导图软件,MindManager有专门的文件格式.如果读者想多借鉴导图,就应该了解MindManager的文件格式. Min ...

  9. 各种图(流程图,思维导图,UML,拓扑图,ER图)简介

    来源于:http://www.cnblogs.com/jiqing9006/p/3344221.html 流程图 1.定义:流程图是对过程.算法.流程的一种图像表示,在技术设计.交流及商业简报等领域有 ...

随机推荐

  1. excel导出的集中情况

    jsp 页面: 导出按钮: <form id="excel" name="exportForm" method="post" acti ...

  2. R2:获取一个event_base

    原文链接:http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html 创建一个event_base 在你使用任何有意思的Libeve ...

  3. javascript call()与apply()

    1.方法定义 call方法: 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call ...

  4. MetInfo操作笔记

    1.去版权(前台) 文件路径:templates/模板名称/foot.php <div class="powered_by_metinfo">Powered by &l ...

  5. JavaScript中的memorizing技术

    今天看<JavaScript>设计模式第七章--工厂模式的时候接触到memorizing技术,简单的说就是对于某个方法,调用它的实例只在第一次调用它的时候才会进行方法中的计算,之后该实例再 ...

  6. OpenStack点滴03-Neutron

    OpenStack Neutron是一个比较复杂的组件,如果说OpenStack安装部署过程哪一个组件最麻烦,那就肯定是网络组件Neutron了. 因为我对OpenStack网络这块也不是很熟,就把我 ...

  7. C程序设计语言练习题1-18

    练习1-18 编写一个程序,删除每个输入行末尾的空格及制表符,并删除完全是空格的行. 代码如下: #include <stdio.h> // 包含标准库的信息. #define MAXLI ...

  8. codevs 1220 数字三角形

    1220 数字三角形  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 如图所示的数字三角形,从顶部出发,在每 ...

  9. AudioServicesPlaySystemSound音频服务—备用

    对于简单的.无混音音频,AVAudio ToolBox框架提供了一个简单的C语言风格的音频服务.你可以使用AudioservicesPlaySystemSound函数来播放简单的声音.要遵守以下几个规 ...

  10. 06 - 从Algorithm 算法派生类中删除ExecuteInformation() 和ExecuteData() VTK 6.0 迁移

    在先前的vtk中,如vtkPointSetAlgorithm 等算法派生类中定义了虚方法:ExecuteInformation() 和 ExecuteData().这些方法的定义是为了平稳的从VTK4 ...