稍微总结下,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. oracle查询blob类型

    下午要查询一个数据,要求是从 表t_report 中查找出 mainbody字段中包含“hibernate”字符串的所有信息.而mainbody字段是blob类型.百度后终于找到答案: DBMS_LO ...

  2. CentOS 7 之Shell学习笔记

    脚本是个永恒的话题,以前Dos下面也有Shell编程这一说的,比如说BAT文件有人写的好的话,也是瞬间速度变高大上.Linux下面这个应该更占比重了.我看到园子里有位园友做了一个Linux Shell ...

  3. 转:十条不错的编程观点。(出处:酷 壳 – CoolShell.cn)

    在Stack Overflow上有这样的一个贴子<What’s your most controversial programming opinion?>,翻译成中文就是“你认为最有争议的 ...

  4. Debian/Ubuntu手动编译安装MongoDB C++11驱动及驱动测试

    本文章仅限cnblogs网站内转载!请某网站自觉,遵纪守法,尊重原创! 系统环境情况: 最小化.无桌面环境 新安装的Debian 8 Server 版本操作系统虚拟机一台 手动编译安装MongoDB ...

  5. PHP MYSQL读取中文乱码的解决办法

    其他试了很多种办法,结果最直接最简单的办法就是在SELECT前先发送设置.如下 mysqli_query($con,"SET NAMES 'UTF8'"); mysqli_quer ...

  6. CFont 字体类

    CFont 字体类 初始化函数 CreateFontIndirect 初始化一个由LOGFONT结构给出其特征的CFont对象 CreateFont 初始化用指定特性定义的CFont对象 Create ...

  7. 转:DSP学习经验

    转载:http://www.cnblogs.com/MrYang/archive/2010/12/21/1913035.html

  8. ThreadLocal<T>类

    ThreadLocal<T>类                                        -------每个线程有仅拥有一个T对象                   ...

  9. delphi TCXTreelist 通过代码控制行的可编辑性

    procedure TfrmSetOutPzTradeDeptPerson.grdTradeClientEditing(Sender: TObject;  AColumn: TcxTreeListCo ...

  10. 2014-08-13 SQL语句之Left Join

    今天是在吾索实习的第26天.这天在处理数据库数据的时候发现了一个不错的语句就是Left Join,即左连接.  其功能是:即使右表中没有匹配,也从左表返回所有的行.也就是说,显示的行数与左表一致,且当 ...