繁体   English   中英

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

[英]How can you use Console.Out to write a byte[] to a file?

在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代码。

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

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

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

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

只是

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二进制到控制台。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM