.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.定义:流程图是对过程.算法.流程的一种图像表示,在技术设计.交流及商业简报等领域有 ...
随机推荐
- JavaScript 客户端JavaScript之Document对象中的表单和表单元素
Form对象 代表一个HTML表单(document可以有多个表单元素) 表单访问 document.form[document.forms.length-1] 访问表单元素 document.for ...
- 27 Java动态加载第三方jar包中的类
我加载的方法是://参数fileName是jar包的路径,processorName 是业务类的包名+类名public static A load(String fileName, String pr ...
- [转]C++强制类型转换
dynamic_cast: 通常在基类和派生类之间转换时使用,run-time castconst_cast: 主要针对const和volatile的转换. static_cast: ...
- 用c++11打造类似于python的range
python中的range函数表示一个连续的有序序列,range使用起来很方便,因为在定义时就隐含了初始化过程,因为只需要给begin()和end()或者仅仅一个end(),就能表示一个连续的序列.还 ...
- DEVICE_OBJECT结构参数
typedef struct DECLSPEC_ALIGN(MEMORY_ALLOCATION_ALIGNMENT) _DEVICE_OBJECT { CSHORT Type; USHORT Size ...
- testng,soket write error错误
网上解决手段: testng 工程报错java.net.SocketException SocketException: Software caused connection abort · Iss ...
- spark1.1.0源码阅读-dagscheduler and stage
1. rdd action ->sparkContext.runJob->dagscheduler.runJob def runJob[T, U: ClassTag]( rdd: RDD[ ...
- web api 2 学习笔记 (Odata ODataQueryOptions 使用)
[ODataRoutePrefix("products")] public class ProductController : BaseController { [ODataRou ...
- BZOJ3538: [Usaco2014 Open]Dueling GPS
3538: [Usaco2014 Open]Dueling GPS Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 59 Solved: 36[Subm ...
- 2014-08-04 BBS主页页面的设计
今天是在吾索实习的第19天.这天,开始参照一开始设计的界面原型,真真正正地进行BBS界面的设计.在运用.NET进行界面设计时,发现没有用RP进行界面设计来得容易,很多都要再进行更精细的操作,才能达到原 ...