小弟有数个关于流的小问题。
我创建了一个MemoryStream,是一个位图数据,我现在使用了一个Read(var Buffer; Count: Longint)函数。
1:参数 Buffer 可以为哪些类型?我现在用的是一个一维数组没有,可是二维数组就不行,变长的一维数组也要报错。
2:把数据放入 Buffer 中是什么方式?是把流中数据一个一个的COPY一个放到数组中还是把流的内存地址赋给 Buffer ?我现在是一次性要读取三十多万个字节,但是只用了十几豪秒,如果是COPY的话是不是没有那么快啊?如果只是赋的地址,我把流释放了也还可以访问数组,是不是流的释放并没有破坏具体的数据?我现在是上定义了一个三十万字节长度的一维数组
然后读出来
请问还有没有什么更加方便快速的方法访问指定位置的数据?多谢各位高手了!!!
我创建了一个MemoryStream,是一个位图数据,我现在使用了一个Read(var Buffer; Count: Longint)函数。
1:参数 Buffer 可以为哪些类型?我现在用的是一个一维数组没有,可是二维数组就不行,变长的一维数组也要报错。
2:把数据放入 Buffer 中是什么方式?是把流中数据一个一个的COPY一个放到数组中还是把流的内存地址赋给 Buffer ?我现在是一次性要读取三十多万个字节,但是只用了十几豪秒,如果是COPY的话是不是没有那么快啊?如果只是赋的地址,我把流释放了也还可以访问数组,是不是流的释放并没有破坏具体的数据?我现在是上定义了一个三十万字节长度的一维数组
然后读出来
请问还有没有什么更加方便快速的方法访问指定位置的数据?多谢各位高手了!!!
type tBuffer= Array of byte;
var
RectBmp:TBitmap;
c:TBitmap;
S: TMemoryStream;
b:tbuffer;
v:string;
i:integer;
begin
RectBmp:=TBitMap.Create;
c:=tbitmap.Create ;
s:=TMemoryStream.Create ;
v:='';
setlength(b,304182);
RectBmp.Assign(Image1.Picture.Bitmap);
rectbmp.SaveToStream (s);
s.Position :=54;
s.Read(b,304182); for i:=0 to 304182 do
begin
v:=v+inttostr(b[i])+' '; //会在这句报内存出错 end;
edit1.Text:= v ;
s.Free ;end;
RectBmp.Assign(Image1.Picture.Bitmap);
rectbmp.SaveToStream (s);
s.Position :=54;
s.Read(b,304182); //修改为s.Read(b[0], 304182); 即可取消下面的内存出错 for i:=0 to 304181 do ////////////304182数组越界,但一般不会造成内存出错,
begin
v:=v+inttostr(b[i])+' '; //会在这句报内存出错 end;