.net I/O操作 导图

稍微总结下,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操作 导图的更多相关文章
- [Mindjet MindManager]思维导图的快捷键操作
来源于:http://www.cnblogs.com/whylaughing/p/5530935.html Mindjet MindManager(思维导图) 快捷键如下: Insert or CTR ...
- jQuery中的DOM操作<思维导图>
DOM是Document Object Model的缩写,意思是文档对象模型.DOM是一种与浏览器.平台.语言无关的接口.使用该接口可以轻松地访问页面中所有的标准组件.简单来说,DOM解决了Netsc ...
- jQuery中的DOM操作《思维导图》
首先,是关于jQuery中的DOM操作的<思维导图>,请点击这里:jQuery中的DOM操作 列表框的左右选项移动 <html> <head> <title& ...
- 思维导图FreeMind安装问题及简单使用
思维导图软件使用的坎坷之路 一直想将思维导图加入到工作环境当中 最开始使用的是 MindManager(http://www.mindmanager.cc/) ,而且感觉利用它制作出来的导图外观也比较 ...
- 【干货】jsMind思维导图整合Easyui的右键菜单
原材料: 1.web版本的JavaScript思维导图(BSD开源协议)[戳这里去官网]. 2.easyui最新版[戳这里去官网]. 这里是原本的jsMind: 在线测试地址 :http://hizz ...
- 《HTML重构》读书笔记&思维导图
最近读了<HTML重构>这本书,以下做出自己的总结归纳,大家可以一起学习交流. 什么是重构?重构是在不改变程序行为的基础上进行小的改动是代码基本逐渐完善的过程,通常需要一些自动化工具的帮助 ...
- 跟着9张思维导图学习Javascript
学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 javascript 相关的思维导图(非原创). 思维导图小tips: 思维导图又叫心智图,是表达发射性思维的 ...
- 思维导图MindManager的文件格式与例图
思维导图软件很多,能够画出思维导图的软件更多.作为流传较广而又比较成熟的思维导图软件,MindManager有专门的文件格式.如果读者想多借鉴导图,就应该了解MindManager的文件格式. Min ...
- 各种图(流程图,思维导图,UML,拓扑图,ER图)简介
来源于:http://www.cnblogs.com/jiqing9006/p/3344221.html 流程图 1.定义:流程图是对过程.算法.流程的一种图像表示,在技术设计.交流及商业简报等领域有 ...
随机推荐
- Swift开发必备技巧:内存管理、weak和unowned
因为 Playground 本身会持有所有声明在其中的东西,因此本节中的示例代码需要在 Xcode 项目环境中运行.在 Playground 中可能无法得到正确的结果. 不管在什么语言里,内存管理的内 ...
- ON DUPLICATE KEY UPDATE 当记录不存在时插入,当记录存在时更新
MySQL 当记录不存在时插入,当记录存在时更新网上基本有三种解决方法.第一种:示例一:插入多条记录假设有一个主键为 client_id 的 clients 表,可以使用下面的语句:INSERTINT ...
- 多线程08-Callable和Future
1.简介 Callable是一个接口,与Runnable类似,包含一个必须实现的call方法,可以启动为让另一个线程来执行,执行Callable可以得到一个Future对象 该对象可以监听Callab ...
- jquery 获取 outerHtml 包含当前节点本身的代码
在开发过程中,jQuery.html() 是获取当前节点下的html代码,并不包含当前节点本身的代码,然后我们有时候确需要,找遍jQuery api文档也没有任何方法可以拿到. 看到有的人通过pare ...
- 转载:Linux的vim三种模式
一般模式:在Linux终端中输入“vim 文件名”就进入了一般模式,但不能输入文字. 编辑模式:在一般模式下按i就会进入编辑模式,此时就可以写程式,按Esc可回到一般模式. 命令模式:在一般模式下按: ...
- php代码的一些高效写法
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说 ...
- 不在界面上用控件 动态创建idhttp,IdAntiFreeze来用
不在界面上用控件 动态创建idhttp,IdAntiFreeze来用 var IdHTTP: Tidhttp; IdAntiFreeze: TidAntiFreeze; begin IdAntiFre ...
- Python3 如何优雅地使用正则表达式(详解三)
模块级别的函数 使用正则表达式也并非一定要创建模式对象,然后调用它的匹配方法.因为,re 模块同时还提供了一些全局函数,例如 match(),search(),findall(),sub() 等等.这 ...
- AtomicInteger小小的理解
这里仅仅是验证多线程环境下,AtomicInteger的安全性. 通过源码不难发现两点: 1.value属性是volatile修饰 2.使用了unsafe的CAS操作 通过上述两点,实现非阻塞同步(乐 ...
- Unity中的各种寻找GameObject方法
1.GameObject.Find():寻找Hierarchy面板中的activie 不为false的游戏对象: 路径如官方事例写法: public class ExampleClass : Mono ...