2

我正在尝试使用这个遗留的 Delphi Prism 应用程序找到出路。我以前从未在 Delphi Prism 上工作过。

如何将 Stream 类型转换为 Byte Array 类型?由于我不了解 Delphi Prism,请提供详细的代码。

基本上我想使用 WCF 服务上传图像并希望将图像数据作为字节数组传递。

谢谢。

4

2 回答 2

3

选项 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;
于 2013-05-10T00:52:57.227 回答
2

这是一个使用文件流的示例(但这应该适用于任何类型的流):

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;

在第一行我创建一个文件流开始,这可以是你的流。然后我用流的长度创建一个字节数组。在第三行,我将流的内容复制到字节数组中。

于 2013-05-10T07:39:36.900 回答