我正在尝试用这个遗留的Delphi Prism应用程序找到一条出路。我以前从未在Delphi Prism上工作过。
如何将Stream类型转换为Byte Array类型?请详细的代码将真正感谢,因为我没有德尔福棱镜的知识。
基本上,我想上传一个图像使用WCF服务,并希望通过字节数组的图像数据。
谢谢。
发布于 2013-05-10 08:52:57
选项1)如果您正在使用MemoryStream,则可以直接使用MemoryStream.ToArray方法。
选项2)如果您使用的是.Net 4,可以使用CopyTo方法将源流的内容复制到MemoryStream中,然后调用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-10 15:39:37
下面是一个使用文件流的示例(但这应该适用于任何类型的流):
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;在第一行,我创建了一个文件流作为开始,这可以是你的流。然后,我创建一个带有流长度的字节数组。在第三行,我将流的内容复制到字节数组中。
https://stackoverflow.com/questions/16472969
复制相似问题