Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
ВнизА-а! Почему TDecompressionStream распаковывает не то?! Найти похожие ветки
← →
Aleksandr. (2005-03-03 16:03) [0]Упаковываю MemoryStream:
procedure DoEncode(M: TMemoryStream);
var
Z : TCompressionStream;
Buf : array of byte;
i,j : cardinal;
D : TStream;
begin
M.Seek(0,0);
i:=M.Size;
D:=TMemoryStream.Create;
Z:=TCompressionStream.Create(clDefault,D);
try
SetLength(Buf,i);
j:=M.Read(Buf[0],i);
if i<>j then
raise Exception.Create("Length diffs!");
Z.Write(Buf[0],i);
D.Seek(0,0);
M.Clear;
M.Write(i,SizeOf(i)); // write size of uncompressed data
SetLength(Buf,D.Size);
D.Read(Buf[0],Length(Buf));
M.Write(Buf[0],length(Buf));
M.Seek(0,0)
finally
Z.Free;
D.Free
end;
то бишь сразу после упаковки перед данными пишется размер пакуемого Stream.
Затем я пытаюсь распаковать упакованный Stream:
procedure DoDecode(M: TMemoryStream);
var
Z : TDeCompressionStream;
Buf : array of byte;
i : cardinal;
D : TMemoryStream;
begin
M.Seek(0,0);
M.Read(i,SizeOf(i)); // read size of uncompressed file
D:=TMemoryStream.Create;
try
SetLength(Buf,M.Size-M.Position);
M.Read(Buf[0],length(Buf));
D.Write(Buf[0],length(buf));
D.Seek(0,0);
Z:=TDecompressionStream.Create(D);
try
SetLength(Buf,i);
i:=Z.Read(Buf[0],i);
if i<>Length(Buf) then
raise Exception.Create("length diffs!")
finally
Z.Free
end
finally
D.Free
end;
M.Clear;
M.Write(Buf[0],i);
M.Seek(0,0)
end;
Так вот на ошибочку с
if i<>Length(Buf) then
raise Exception.Create("length diffs!")
я все время и получаю! То есть TDeCompressionStream распаковывает полученные данные с другим размером! Что тут не так?
← →
MU (2005-03-03 16:07) [1]Что за бред?!
M.Write(i,SizeOf(i));
SizeOf + F1
← →
MU (2005-03-03 16:09) [2]извините, ошибся... :(
← →
Aleksandr. (2005-03-03 16:10) [3]MU :
В чем тут Вы видите бред? Что, по-Вашему, надо писать в качестве количества байт записываемой информации?
← →
MU (2005-03-03 16:34) [4]извините еще раз :)
а тут, когда вы только считали размер, значение i верное?
M.Seek(0,0);
M.Read(i,SizeOf(i)); // read size of uncompressed file
← →
Aleksandr. (2005-03-03 17:07) [5]MU :
Да, верное. И при компрессе возвращает правильное число ужатых байт.
Пришлось пока все заменить на CompressBuf/DecompressBuf, и все работает правильно, но нафига тогда нужны объекты...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.034 c