내가 무엇을하려고하는지 설명하겠습니다. Paint.NET 용 Filetype 플러그인을 작성하고 다양한 사용자 정의 인코딩 방법을 테스트하고 가장 작게 만드는 방법으로 파일을 저장하고 싶습니다. 파일 크기.C# 함수가 스트림을 반환합니다.
내 실제 코드입니다 (단지 내가하고 싶은 것을 보여주기 위해 단순화되었습니다). 그래서 여기
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);
}
}
내가 대신 스트림의 바이트 배열 작업을 시도했지만 바이트의 문제는 내가의 분명 아무 생각이 없기 때문에 내가 정말 큰 바이트 배열을 선언해야한다는 것입니다 인코딩에 필요한 바이트 수. 그것은 수백만이 될 수 있습니다 ...
저는 C#의 초보자입니다. 왜 그것이 전혀 작동하지 않는지, 어떻게 해결할 수 있는지 또는 개선 방법에 대해 알고 있다면 말해주십시오. 그러나 컴파일 된 후에는 2kb 이상을 필요로하는 복잡한 코드를 작성하지 마십시오. 작고 간단하며 효율적인 코드를 원합니다. 저수준 프로그래밍으로 기분이 나아졌습니다 ... 미리 감사드립니다!
'Func'배열의 배열을 원할 수도 있습니다. –
감사합니다. 대표자를 찾고 결코 사용하지 않았고 나를 어떻게 유용하게 사용할 수 있을지 모르겠다. ^^ – guix