类如Stream,StreamReader,StreamWriter等工具IDisposable界面.这意味着,我们可以Dispose()在这些类的对象上调用方法.他们还定义了一个public名为的方法Close().现在让我感到困惑的是,一旦我完成了对象,我该怎么称呼?如果我同时打电话怎么办?
我目前的代码是这样的:
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream))
{
using (StreamWriter writer = new StreamWriter(filename))
{
int chunkSize = 1024;
while (!reader.EndOfStream)
{
char[] buffer = new char[chunkSize];
int count = reader.Read(buffer, 0, chunkSize);
if (count != 0)
{
writer.Write(buffer, 0, count);
}
}
writer.Close();
}
reader.Close();
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我编写了using()构造,自动调用Dispose()每个对象的方法.但我也称之为Close()方法.这样对吗?
请告诉我使用流对象时的最佳做法.:-)
MSDN示例不使用using()构造,并且调用 …
我正在开发自己的社交网络,我还没有在网上找到用户操作流的实现示例...例如,如何过滤每个用户的操作?如何存储动作事件?我可以将哪种数据模型和对象模型用于操作流和自己的操作?
参考以下线程: Java App:无法正确读取iso-8859-1编码文件
以编程方式确定输入流/文件的正确字符集编码的最佳方法是什么?
我尝试过使用以下内容:
File in = new File(args[0]);
InputStreamReader r = new InputStreamReader(new FileInputStream(in));
System.out.println(r.getEncoding());
Run Code Online (Sandbox Code Playgroud)
但是在我知道用ISO8859_1编码的文件中,上面的代码产生了ASCII,这是不正确的,并且不允许我正确地将文件的内容呈现回控制台.
我有几个正在实现OutputStream的输出侦听器.它可以是写入stdout或文件的PrintStream,也可以是写入内存或任何其他输出目的地; 因此,我将OutputStream指定为方法中的(a)参数.
现在,我收到了String.在这里写入流的最佳方式是什么?
我应该只使用Writer.write(message.getBytes())吗?我可以给它字节,但如果目标流是字符流,那么它会自动转换吗?
我需要在这里使用一些桥流吗?
我正在使用python ftplib来编写一个小的FTP客户端,但是包中的一些函数不返回字符串输出,而是打印到stdout.我想重定向stdout到一个对象,我将能够从中读取输出.
我知道stdout可以重定向到任何常规文件:
stdout = open("file", "a")
Run Code Online (Sandbox Code Playgroud)
但我更喜欢不使用本地驱动器的方法.
我正在寻找类似于BufferedReaderJava的东西,可用于将缓冲区包装到流中.
我不习惯在Java中使用流 - 我如何创建InputStream一个String?
我想在我的date.txt文件中添加带有文本的新行,但不是将其添加到现有的date.txt中,而是应用程序正在创建新的date.txt文件.
TextWriter tw = new StreamWriter("date.txt");
// write a line of text to the file
tw.WriteLine(DateTime.Now);
// close the stream
tw.Close();
Run Code Online (Sandbox Code Playgroud)
我想打开txt文件,添加一些文本,关闭它,然后点击一下后:打开date.txt,添加文本,然后再次关闭它.
所以我可以得到:
按下按钮:打开txt - >添加当前时间,然后关闭它.按下另一个按钮,txt打开 - >在同一行中添加文本"OK"或"NOT OK",然后再次关闭它.
所以我的txt文件看起来像这样:
2011-11-24 10:00:00 OK
2011-11-25 11:00:00 NOT OK
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?谢谢!
溪流对我来说有点神秘.我不知道何时使用哪个流以及如何使用它们.有人可以向我解释如何使用流吗?
如果我理解正确,有三种流类型:
streamread streamwrite stream它是否正确?并且,例如,a Memorystream和a 之间的区别是FileStream什么?
我的根本问题是,当using调用Disposea时StreamWriter,它也会处理BaseStream(同样的问题Close).
我有一个解决方法,但正如你所看到的,它涉及复制流.有没有办法这样做而不复制流?
这样做的目的是将字符串(最初从数据库中读取)的内容获取到流中,因此可以由第三方组件读取该流.
注意:我无法更改第三方组件.
public System.IO.Stream CreateStream(string value)
{
var baseStream = new System.IO.MemoryStream();
var baseCopy = new System.IO.MemoryStream();
using (var writer = new System.IO.StreamWriter(baseStream, System.Text.Encoding.UTF8))
{
writer.Write(value);
writer.Flush();
baseStream.WriteTo(baseCopy);
}
baseCopy.Seek(0, System.IO.SeekOrigin.Begin);
return baseCopy;
}
Run Code Online (Sandbox Code Playgroud)
用作
public void Noddy()
{
System.IO.Stream myStream = CreateStream("The contents of this string are unimportant");
My3rdPartyComponent.ReadFromStream(myStream);
}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我正在寻找一个名为的假想方法BreakAssociationWithBaseStream,例如
public System.IO.Stream CreateStream_Alternate(string value)
{
var baseStream = new System.IO.MemoryStream();
using (var writer …Run Code Online (Sandbox Code Playgroud) stream ×10
c# ×4
java ×3
architecture ×1
dispose ×1
encoding ×1
file ×1
idisposable ×1
python ×1
redirect ×1
stdout ×1
streamreader ×1
streamwriter ×1
string ×1
terminology ×1
text-files ×1
winforms ×1