我正在尝试使用这个遗留的 Delphi Prism 应用程序找到出路。我以前从未在 Delphi Prism 上工作过。
如何将 Stream 类型转换为 Byte Array 类型?由于我不了解 Delphi Prism,请提供详细的代码。
基本上我想使用 WCF 服务上传图像并希望将图像数据作为字节数组传递。
谢谢。
选项 1) 如果您使用的是 a MemoryStream
,您可以MemoryStream.ToArray
直接使用 Method。
选项 2)如果您使用的是 .Net 4,请使用CopyTo
方法将源 Stream 的内容复制到 aMemoryStream
并调用MemoryStream.ToArray
函数。
像这样
method TMyClass.StreamToByteArr(AStream: Stream): array of Byte;
begin
using LStream: MemoryStream := new MemoryStream() do
begin
AStream.CopyTo(LStream);
exit(LStream.ToArray());
end
end;
选项 3)您使用的是 .Net 的旧版本,您可以编写一个自定义函数来从源流中提取数据,然后填充MemoryStream
method TMyClass.StreamToByteArr(AStream: Stream): array of Byte;
var
LBuffer: array of System.Byte;
rbytes: System.Int32:=0;
begin
LBuffer:=new System.Byte[1024];
using LStream: MemoryStream := new MemoryStream() do
begin
while true do
begin
rbytes := AStream.Read(LBuffer, 0, LBuffer.Length);
if rbytes>0 then
LStream.Write(LBuffer, 0, rbytes)
else
break;
end;
exit(LStream.ToArray());
end;
end;
这是一个使用文件流的示例(但这应该适用于任何类型的流):
class method ConsoleApp.Main;
begin
var fs := new FileStream('SomeFileName.dat', FileMode.Open);
var buffer := new Byte[fs.Length];
fs.Read(buffer, 0, fs.Length);
end;
在第一行我创建一个文件流开始,这可以是你的流。然后我用流的长度创建一个字节数组。在第三行,我将流的内容复制到字节数组中。