本文将带您了解关于我应该关闭StringReader吗?的新内容,同时我们还将为您解释stringwriter需要关闭吗的相关知识,另外,我们还将为您提供关于.net–可以不配置MemoryStrea
本文将带您了解关于我应该关闭StringReader吗?的新内容,同时我们还将为您解释stringwriter需要关闭吗的相关知识,另外,我们还将为您提供关于.net – 可以不配置MemoryStream / StringReader吗?、android – 我应该使用strings.xml / R.string而不是全局字符串常量(例如对于意图中的键)吗?、c – 我应该使用另一个streambuf创建一个临时ostream吗?、c# – 关闭FileStream会关闭StreamReader吗?的实用信息。
本文目录一览:- 我应该关闭StringReader吗?(stringwriter需要关闭吗)
- .net – 可以不配置MemoryStream / StringReader吗?
- android – 我应该使用strings.xml / R.string而不是全局字符串常量(例如对于意图中的键)吗?
- c – 我应该使用另一个streambuf创建一个临时ostream吗?
- c# – 关闭FileStream会关闭StreamReader吗?
我应该关闭StringReader吗?(stringwriter需要关闭吗)
我使用aStringReader
将字符串转换为可以上传到SFTP服务器的文件(需要流)。StringReader
事后结束这一点有什么意义吗?据我在源代码中看到的,它只是将字符串设置为null
…
我可以这样做,但是由于将close方法标记为throw,IOException
并且我只需要将其包装在try
catch中,代码最终看起来比可能需要的可怕得多。
答案1
小编典典如果您知道要处理的StringReader
是您将要扔掉的产品,那么我看不出有什么理由要关闭它。我无法想象关闭它后会保留对它的引用的任何原因,因此将字符串设置null
为垃圾回收并没有真正的好处。如果要创建一个采用a的方法,Reader
则可能会关闭它,因为您不知道基础类型。
.net – 可以不配置MemoryStream / StringReader吗?
通常我使用一个使用块来处理StringReader或MemoryStream,但是因为我想要返回一个XmlReader,如果我想要使用这个设计,我不能这样做.
我不希望MemoryStream分配大量的内存,所以我可以忍受资源释放的轻微延迟.
在这种情况下让GC处理StringReader和MemoryStream的后果是否可以接受?
我应该澄清,这是一个实际问题,而不是最佳实践问题.显然,这个理论要求我应该清理自己的资源分配,但理论上也说我应该选择最简单的设计来实现最大的可维护性.在某些情况下,打破最佳实践可以证明IMHO是合理的,我的问题是这个具体案例是否有理由打破最佳实践.
这也只是关于StringReader和MemoryStream,而不是一般的流或读者.
我在这种情况下证明它的理由是,StringReader / MemoryStream的实际创建被很好地封装在返回XmlReader的方法中,因此可以控制XmlReader不会被提供有限资源的流.
解决方法
我们不能让你处理它,但个人:我对我的使用很挑剔
android – 我应该使用strings.xml / R.string而不是全局字符串常量(例如对于意图中的键)吗?
使用其中一个是否有任何优点/缺点?
我很确定像下面这样的硬编码字符串不是一个好方法.
putExtra("extraKey",extra);
使用strings.xml或Constants,您可以使用拼写检查和自动完成功能.
R.string的典型行可能如下所示.
intent.putExtra(getString(R.string.first_player_for_intent),firstPlayer);
与…相比
intent.putExtra(MyClass.first_player_for_intent),firstPlayer);
如果你应该使用常量,它们应该在哪个类中?
解决方法
c – 我应该使用另一个streambuf创建一个临时ostream吗?
ostream& operator << (ostream& o,const MyThing& t) { // ... interesting code here ... return o; }
在函数中,我可能想要在流上指定格式选项.例如,我可能希望将一个数字打印为十六进制,无论在传入函数时如何配置o.
其次,我可能想要对当前格式标志做出假设.例如,除非另有要求,否则可以假设数字格式为十进制格式是很好的.
最后,当函数退出时,我希望o上的格式化选项与调用函数之前的格式相同,以便调用者不变.这只是一个礼貌的呼叫者的问题.
到目前为止,我已经通过在函数中创建一个本地的ostringstream来实现这一点,完成所有的工作(包括设置格式化选项),并在函数结束时将.str()发送到o. StackOverflow问题here表明,比我更聪明的人采取同样的做法.然而,令我感到困扰的是,我在ostringstreams中保留了很多数据,这些数据可能早些时候被发送到输出(字符串可以变得相当大).
我有两个问题:
1)在o.rdbuf()周围创建一个临时(基于堆栈)的ostream是合法的,习惯的,良好的形式等,并且在这个ostream上做我的工作吗?我自己的测试和cppreference.com的页面似乎表明我可以.
ostream& operator << (ostream& o_,const MyThing& t) { ostream o (o_.rdbuf()); // write stuff to "o",// setting formatting options as I go. return o_; // Formatting on the parameter ostream o_ unchanged. }
2)还有另一个更好的方法,我没有考虑过?
解决方法
c# – 关闭FileStream会关闭StreamReader吗?
public void ReadFile() { var file = new FileStream("c:\file.txt",FileMode.Open,FileAccess.Read); var reader = new StreamReader(file); try { txtFile.Text = reader.ReadToEnd(); } catch (Exception) { throw; } finally { file.Close(); } }
解决方法
@Bruno对关闭最外层包装器提出了一个很好的观点.最好关闭最外层的流并让它关闭底层流,以确保正确释放所有资源.
来自Reflector ……
public class StreamReader : TextReader { public override void Close() { this.dispose(true); } protected override void dispose(bool disposing) { try { if ((this.Closable && disposing) && (this.stream != null)) { this.stream.Close(); } } finally { if (this.Closable && (this.stream != null)) { this.stream = null; this.encoding = null; this.decoder = null; this.byteBuffer = null; this.charBuffer = null; this.charPos = 0; this.charLen = 0; base.dispose(disposing); } } } }
今天关于我应该关闭StringReader吗?和stringwriter需要关闭吗的分享就到这里,希望大家有所收获,若想了解更多关于.net – 可以不配置MemoryStream / StringReader吗?、android – 我应该使用strings.xml / R.string而不是全局字符串常量(例如对于意图中的键)吗?、c – 我应该使用另一个streambuf创建一个临时ostream吗?、c# – 关闭FileStream会关闭StreamReader吗?等相关知识,可以在本站进行查询。
本文标签: