读取stream方法中,integer类型变量初值的诡异问题

                            
先看代码,这是个自己定义的函数:   
  function   MyLoadFromFile(SourceFile,TargetFile   :string):Boolean;  
  var  
      Source:TFileStream;  
      Target:TMemoryStream;  
      MyFileSize:integer;//问题就是这个变量  
  begin  
      try  
          Target:=TMemoryStream.Create;  
          Source:=TFileStream.Create(SourceFile,fmOpenRead);  
          try  
              Source.Seek(-sizeof(MyFileSize),soFromEnd);  
              Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));//读出资源大小  
              Source.Seek(-MyFileSize,soFromEnd);//定位到资源位置  
              Target.CopyFrom(Source,MyFileSize-sizeof(MyFileSize));//取出资源  
              Target.SaveToFile(TargetFile);//存放到文件  
          finally  
              Target.Free;  
              Source.Free;  
          end;  
      except  
          Result:=false;  
          Exit;  
      end;  
      Result:=true;  
  end;  
   
  下面是问题:  
  问题一:  
  MyFileSize这个integer类型的变量,并没有显性的赋给初值,但是执行这个程序的时候,在Source.Seek(-sizeof(MyFileSize),soFromEnd);这个语句执行时(也就是第一句),它就有了值,不是0哦,是一个不小的数字,一次是17,一次是400000多,不知道是不是巧合,和我想操作的文件大小差不许多;不知道这个数字是怎么来的.我以前是用java语言的,java中int类型如果不赋初值,系统会默认初值是0,不知道delphi是否有默认初值这一说法,或者那初值是怎么来的,灵异事件???  
  问题二:  
  在这段程序中,MyFileSize这个变量被各种玩弄,不停的被拿来使用,我本来想用单步运行来看看它的值是怎么变化的,结果上来那个初值就给我整蒙了,请哪位高手给小弟解释一下MyFileSize这个参数的值到底每一步都代表了啥,555  
  ps:感觉这个要求有些过分,如果大侠们觉得这个要求很不爽,当然可以不回答这第二个问题,它不是我疑惑的主要问题  
  问题三:  
  Source.ReadBuffer(MyFileSize,sizeof(MyFileSize));  
  这个方法的定义是Procedure   ReadBuffer(var   Buffer;Count:Longint);  
  其中参数Buffer我一直理解不好,因为程序是用Integer类型变量来做这个Buffer的;我在网上查询缓冲,也没弄明白缓冲到底是怎么个东西,它可以用什么类型的变量来做,请各位大侠解释一下~(感觉这个问题比我第二个问题上路吧?)  
   
  最后说明一下这段代码是做什么的,我看的一个stream操作例子,是将一个文件写入另一个文件尾部,然后再读取出来的例子,号称为文件的加密解密.上面提供的代码是解密代码,我再将加密代码贴出来.  
  Function   MyAddtoFile(SourceFile,TargetFile:string):Boolean;  
  var  
      Target,Source:TFileStream;  
      MyFileSize:integer;  
  begin  
      try  
          Source:=TFileStream.Create(SourceFile,fmOpenRead   or   fmShareExclusive);  
          Target:=TFileStream.Create(TargetFile,fmOpenWrite   or   fmShareExclusive);  
          try  
              Target.Seek(0,soFromEnd);//往尾部添加资源  
              Target.CopyFrom(Source,0);  
              MyFileSize:=Source.Size+Sizeof(MyFileSize);//计算资源大小,并写入辅程尾部  
              Target.WriteBuffer(MyFileSize,sizeof(MyFileSize));  
          finally  
              Target.Free;  
              Source.Free;  
          end;  
      except  
          Result:=False;  
          Exit;  
      end;  
      Result:=True;  
  end;  
   
  还有,这个加密代码运行正确,而那个解密代码运行报错,问题就是出在那诡异的MyFileSize变量上...  
  背后发凉,这个问题怎么问得象鬼故事呢~~盼望大家早日为小弟解答心中疑惑

查看回复