想用TZCompressionStream来压缩浮点数组,该怎么搞?
想用TZCompressionStream来压缩浮点数组,该怎么搞??我将浮点数组读入TMemoryStream中,再利用 TZCompressionStream压缩,但是解压出来是错误的。代码如下
//压缩的
TMemoryStream *fs = new TMemoryStream(); //要压缩的原始内存流
fs->Write(f,4000); //f是一个1000个数字的数组
int fsize = 0;
fsize = fs->Size; //文件大小
TMemoryStream *ms = new TMemoryStream(); //要压缩的原始内存流
ms->Write(&fsize,sizeof(fsize)); //建立接收的流,并写入原始文件大小
TZCompressionStream *cs = new TZCompressionStream(ms,zcDefault);
fs->SaveToStream(cs); //传入压缩数据
ms->SaveToFile("F:\\1.zip"); //保存
ShowMessage("完成");
delete cs;
delete fs;
delete ms;
//解压的
TMemoryStream *fs = new TMemoryStream(); //准备解压的流
TMemoryStream* ms = new TMemoryStream(); //接收解压数据的流
fs->LoadFromFile("F:\\1.zip"); //必须是上一个压缩方法生成的文件
fs->Position = 0;
int fsize = 0;
fs->ReadBuffer(&fsize,sizeof(fsize)); //得到解压之后的大小
ms->SetSize(4000); //设置接收解压数据的流的大小
TZDecompressionStream* ds = new TZDecompressionStream(fs); //解压流
ds->Read(ms->Memory, fsize); //把解压后的数据读出存放到已准备好接收的流
float *ff=new float[1000];
ms->Read(ff, ms->Size);
for(int i=0;i<1000;i++)
{
StringGrid1->Cells[2][i+1]=ff[i];
Chart1->Series[1]->AddXY(0.001*i,ff[i]);
}
delete fs;
delete ms;
delete ds;