zoukankan      html  css  js  c++  java
  • TRawByteStringStream

    TRawByteStringStream

      TRawByteStringStream = class(TStream)
      protected
        fDataString: RawByteString;
        fPosition: Integer;
        procedure SetSize(NewSize: Longint); override;
      public
        constructor Create(const aString: RawByteString = ''); overload;
        function Read(var Buffer; Count: Longint): Longint; override;
        function Seek(Offset: Longint; Origin: Word): Longint; override;
        function Write(const Buffer; Count: Longint): Longint; override;
        property DataString: RawByteString read fDataString write fDataString;
      end;
    { TRawByteStringStream }
    
    constructor TRawByteStringStream.Create(const aString: RawByteString);
    begin
      fDataString := aString;
    end;
    
    function TRawByteStringStream.Read(var Buffer; Count: Integer): Longint;
    begin
      if Count <= 0 then
        Result := 0
      else
      begin
        Result := Length(fDataString) - fPosition;
        if Result > Count then
          Result := Count;
        Move(PByteArray(fDataString)[fPosition], Buffer, Result);
        inc(fPosition, Result);
      end;
    end;
    
    function TRawByteStringStream.Seek(Offset: Integer; Origin: Word): Longint;
    begin
      case Origin of
        soFromBeginning:
          fPosition := Offset;
        soFromCurrent:
          fPosition := fPosition + Offset;
        soFromEnd:
          fPosition := Length(fDataString) - Offset;
      end;
      if fPosition > Length(fDataString) then
        fPosition := Length(fDataString)
      else if fPosition < 0 then
        fPosition := 0;
      result := fPosition;
    end;
    
    procedure TRawByteStringStream.SetSize(NewSize: Integer);
    begin
      SetLength(fDataString, NewSize);
      if fPosition > NewSize then
        fPosition := NewSize;
    end;
    
    function TRawByteStringStream.Write(const Buffer; Count: Integer): Longint;
    begin
      if Count <= 0 then
        Result := 0
      else
      begin
        Result := Count;
        SetLength(fDataString, fPosition + Result);
        Move(Buffer, PByteArray(fDataString)[fPosition], Result);
        inc(FPosition, Result);
      end;
    end;
    

      

  • 相关阅读:
    AJAX聊天室小DEMO(讨厌JS,IE下有问题已解决)
    [ZT]线索二叉树(C#数据结构五)
    栈(C#数据结构学习二)
    eclipse 安装 resin 3 步骤
    解决全局utf8编码下asp.net接收gb2312乱码的问题
    模板里的控件要用FindControl(id)方法读取
    OpenSessionInView
    asp:button控件调用js函数不刷新方法
    OFFICE 出现“正在配置”的解决方法
    开发经验
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/13733625.html
Copyright © 2011-2022 走看看