mormot2 TRawByteStringStream

mormot2 TRawByteStringStream

mormot.core.base.pas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/// TStream using a RawByteString as internal storage
// - default TStringStream uses WideChars since Delphi 2009, so it is
// not compatible with previous versions, and it does make sense to
// work with RawByteString/RawUTF8 in our UTF-8 oriented framework
// - just like TStringStream, is designed for appending data, not modifying
// in-place, as requested e.g. by TTextWriter or TBufferWriter classes
TRawByteStringStream = class(TStream)
protected
  fPosition: integer;
  fDataString: RawByteString;
  {$ifdef FPC}
  function GetPosition: Int64; override;
  {$endif FPC}
  function  GetSize: Int64; override;
  procedure SetSize(NewSize: Longint); override;
public
  /// initialize a void storage
  constructor Create; overload;
  /// initialize the storage, optionally with some RawByteString content
  constructor Create(const aString: RawByteString); overload;
  /// read some bytes from the internal storage
  // - returns the number of bytes filled into Buffer (<=Count)
  function Read(var Buffer; Count: Longint): Longint; override;
  /// change the current Read/Write position, within current stored range
  function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
  /// change the current Read/Write position, within current stored range
  function Seek(Offset: Longint; Origin: Word): Longint; override;
  /// append some data to the buffer
  // - will resize the buffer, i.e. will replace the end of the string from
  // the current position with the supplied data
  function Write(const Buffer; Count: Longint): Longint; override;
  /// retrieve the stored content from a given position, as UTF-8 text
  procedure GetAsText(StartPos, Len: PtrInt; var Text: RawUTF8);
  /// direct low-level access to the internal RawByteString storage
  property DataString: RawByteString
    read fDataString write fDataString;
end;

  

posted @   delphi中间件  阅读(393)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2014-11-29 关于INTRAWEB ISAPI DLL发布
点击右上角即可分享
微信分享提示