首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LZO压缩-如何设置目标长度?

LZO压缩-如何设置目标长度?
EN

Stack Overflow用户
提问于 2018-03-06 18:42:47
回答 1查看 338关注 0票数 0

我正在尝试使用lzo.dll压缩一些文件,我的代码(Delphi)是:

代码语言:javascript
复制
function lzo2a_999_compress(const Source: Pointer; SourceLength: LongWord; Dest: Pointer; var DestLength: LongWord; WorkMem: Pointer): Integer; cdecl; external 'lzo.dll';
...
function LZO_compress(FileInput, FileOutput: String): Integer;
var
   FInput, FOutput: TMemoryStream;
   WorkMem: Pointer;
   Buffer: TBytes;
   OutputLength: LongWord;
begin
   FInput := TMemoryStream.Create;
   FOutput := TMemoryStream.Create;
   FInput.LoadFromFile(FileInput);
   FInput.Position := 0;
   GetMem(WorkMem, 1000000);
   OutputLength := ??!?!?!;
   SetLength(Buffer, OutputLength);
   try
      lzo2a_999_compress(FInput.Memory, FInput.Size, Buffer, OutputLength, WorkMem);
   finally
      FOutput.CopyFrom(Buffer, Length(Buffer));
   end;
   FOutput.SaveToFile(FileOutput);
   FreeMem(WorkMem, 1000000);
   FInput.Free;
   FOutput.Free;
end;
...

问题是:如何设置"OutputLength"?我可以分配一个巨大的大小来防止问题,但是FOutput将是相同大小的缓冲区。如何将压缩的数据仅保存在OutputFile上?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 19:21:27

在函数调用之前,您不能(也不需要)知道它。它是一个var参数,将由函数在返回时设置。然后,您可以使用OutputLength变量来知道要从缓冲区复制多少字节:

代码语言:javascript
复制
OutputLength := 0; // initialize only
...
try
  lzo2a_999_compress(FInput.Memory, FInput.Size, Buffer, OutputLength, WorkMem);
finally
  FOutput.CopyFrom(Buffer, OutputLength);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49137884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档