如何使用Console.Out将byte []写入文件?

时间:2013-01-09 17:26:04

标签: c# stream console textwriter

在java中你可以这样做:

File file = new File(filepath);
PrintStream pstream = new PrintStream(new FileOutputStream(file));
System.setOut(pstream);

byte[] bytes = GetBytes();
System.out.write(bytes);

我想在C#中做类似的事情。我试过这个,但它不起作用:

StreamWriter writer = new StreamWriter(filepath);
Console.SetOut(writer);

byte[] bytes = GetBytes();
Console.Out.Write(bytes);

看起来这里的主要问题是Write方法不接受字节数组作为参数。

我知道我可以使用File.WriteAllBytes(文件路径,字节),但我希望保持C#代码尽可能接近原始的java代码。

2 个答案:

答案 0 :(得分:3)

  

我知道我可以使用File.WriteAllBytes(文件路径,字节),但我希望保持C#代码尽可能接近原始的java代码。

Java代码做了一些你不应该做的事情:它将二进制数据写入标准输出,标准流不是为二进制数据设计的,它们的设计考虑了文本。 .NET在这里做“正确的事情”,并为您提供文本接口,而不是二进制数据接口。

因此,正确的方法是将数据直接写入文件,而不是标准输出。

作为一种解决方法,您可以伪造它并使用byte范围内的不变编码将字节转换为字符:自.NET的“不变”编码以来不起作用字符串是UTF-16,它不接受每个字节输入有效;例如,字节数组new byte[] { 0xFF }是无效的UTF-16代码序列。

答案 1 :(得分:0)

不是just

File.WriteAllBytes(filepath, GetBytes())

或者你可以做到,

using (var writer = new StreamWriter(filepath))
{
    var bytes = GetBytes();
    writer.BaseStream.Write(bytes, 0, bytes.Length)
};

StreamWriter传递给SetOut后,它只会公开不允许访问内部流的基础TextWriter。这是有道理的,因为Console旨在为用户提供输出。我猜它是非标准的输出arbritary二进制到控制台。

相关问题