TStringStreamでは、bytes
そのBytes
プロパティの使用は、を使用してbytes
抽出されたものとは異なりTStream.Read
ます。以下に示すように:
bytes
抽出されたを使用して、TStream.Read
正しいデータを表します。- そのプロパティ
bytes
を使用すると、より多くのデータが含まれます。Bytes
(正しいの最後のバイトはbytes
間違ったものとは異なりますbytes
)
考えられる理由についてコメントしていただけますか?ご助力ありがとうございます!
PS:Delphi XE、Windows7(Delphi 7に戻ったTStringStreamにはLoadFromFileまたはSaveToFileがないようです。)
PS:サンプルファイルはSkyDriveからダウンロードできます:REF_EncodedSample&REF_DecodedSample。(Zlibで圧縮された画像ファイル。)
procedure CompareBytes_2;
var
ss_1: TStringStream;
ss_2: TStringStream;
sbytes_Read: TBytes;
sbytes_Property: TBytes;
len_sbytes_Read: Integer;
len_sbytes_Property: Integer;
filename: string;
begin
filename := 'REF_EncodedSample'; // textual data
// filename := 'REF_DecodedSample'; // non-textual data
ss_1 := TStringStream.Create;
ss_1.LoadFromFile(filename);
ss_2 := TStringStream.Create;
ss_2.LoadFromFile(filename);
ss_1.SaveToFile(filename+ '_CopyByStringStream_1');
ss_2.SaveToFile(filename+ '_CopyByStringStream_2');
len_sbytes_Read := ss_1.Size;
SetLength(sbytes_Read, len_sbytes_Read);
ss_1.Read(sbytes_Read[0], len_sbytes_Read);
sbytes_Property := ss_2.Bytes;
ShowMessage(
BoolToStr(
Length(sbytes_Read) = Length(sbytes_Property),
True));
ShowMessage(
BoolToStr(
sbytes_Read[len_sbytes_Read - 1] = sbytes_Property[len_sbytes_Read - 1],
True));
ss_1.Free;
ss_2.Free;
end;