我该如何使用 MemoryStream
将 Tbytes
类型转换为 二进制文件
?
或者直接使用 TFileStream
,以减少创建中间对象的数量:
procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
var
Stream: TFileStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
if Data <> nil then
Stream.WriteBuffer(Data[0], Length(Data));
finally
Stream.Free;
end;
end;
我认为在这里使用TMemoryStream
并不有帮助,因为它只涉及到额外且不必要的堆内存分配/释放。
TFileStream
还是TMemoryStream.SaveToFile
? - Kermia如果没有TBytesStream可用,Uwe的答案将无效。
procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
var
stream: TMemoryStream;
begin
stream := TMemoryStream.Create;
try
if length(data) > 0 then
stream.WriteBuffer(data[0], length(data));
stream.SaveToFile(FileName);
finally
stream.Free;
end;
end;
TMemoryStream
是一种比必要更慢的解决方案。当你在评论中问“哪个更快?”时,这似乎与你相关。 - David HeffernanWriteBuffer
,因为它具有错误检查功能。我相信你知道这一点,这只是一种疏忽。 - David Heffernan如果答案提到Delphi XE和其他流,而不是TMemoryStream
,那么我建议再提供一种方法。
procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
begin
TFile.WriteAllBytes( FileName, Data );
end;
在Delphi XE中的F.I.:
procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
var
stream: TBytesStream;
begin
stream := TBytesStream.Create(Data);
try
stream.SaveToFile(FileName);
finally
stream.Free;
end;
end;
MemoryStream
。没有区别吗? - Kermia