gpt4 book ai didi

C# 函数返回一个 Stream

转载 作者:行者123 更新时间:2023-11-30 16:15:25 25 4
gpt4 key购买 nike

让我解释一下我正在尝试做的事情:我为 Paint.NET 编写了一个文件类型插件,我希望该插件能够测试各种自定义编码方法,并使用生成最小文件大小的方法保存文件。

这是我的实际代码(简化了很多只是为了演示我想做什么)。那行得通,除了,好吧,请参阅评论:

private void encode1(Stream output)
{
output.WriteByte(0xAA);
}
private void encode2(Stream output)
{
output.WriteByte(0xAA);
output.WriteByte(0xBB);
}

protected override void OnSave(Stream output)
{
if (saveSmallest)
{
// I can't find a clean way to test for the smallest stream size
// and then use the encoder that produced the smallest stream...
}
else if (selectedEncoder == 1)
{
encode1(output);
}
else if (selectedEncoder == 2)
{
encode2(output);
}
}

所以这是我尝试过的方法(也简化了但想法在这里),但它没有用,在任何情况下文件中都没有写入任何内容,我不知道为什么:

private Stream encode1()
{
Stream output = new MemoryStream();
output.WriteByte(0xAA);
return output;
}
private Stream encode2()
{
Stream output = new MemoryStream();
output.WriteByte(0xAA);
output.WriteByte(0xBB);
return output;
}

private void copyStream(Stream input, Stream output)
{
byte[] buffer = new byte[128];
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, read);
}
}

protected override void OnSave(Stream output)
{
if (saveSmallest)
{
// get encoders's streams
Stream[] outputs =
{
encode1(),
encode2(),
//other encoders here
};

// Find the smallest stream
int smallest = 0;
for (int i = 1; i < outputs.Length; i++)
{
if (outputs[i].Length < outputs[smallest].Length)
{
smallest = i;
}
}
//Copy the smallest into the final output
//output = outputs[smallest];
copyStream(outputs[smallest], output);
}
else if (selectedEncoder == 1)
{
//output = encode1();
copyStream(encode1(), output);
}
else if (selectedEncoder == 2)
{
//output = encode2();
copyStream(encode2(), output);
}
}

我还尝试使用字节数组而不是 Stream,但是字节的问题是我必须声明一个非常大的字节数组,因为我显然不知道编码需要多少字节。可能是数百万...

我是 C# 初学者。请告诉我为什么它根本不起作用,我该如何解决它,或者您是否有任何改进的想法。但请不要编写编译后多占用 2kb 的复杂代码,我希望代码小、简单、高效。我对较低级别的编程感觉更好...提前致谢!

最佳答案

在复制流之前尝试 Stream.Seek(0l, SeekOrigin.Begin);

关于C# 函数返回一个 Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19647357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com