Option Explicit
Private mlngCapacity As Long '缓冲区的当前容量,可用于插入新的字符的存储空间
Private mlngLength As Long '字符个数
Private mlngEOA As Long '数组第一个空元素的索引
Private mabyt() As Byte
Private mlngUb As Long '数组上界
Private Sub Class_Initialize()
mlngCapacity = 2048
ReDim mabyt(4095)
End Sub
Private Sub Class_Terminate()
Erase mabyt
End Sub
Public Sub append(ByVal str As String)
Dim abyt() As Byte '添加的字符串转为Byte数组
Dim lngUb As Long '添加的字符串转为Byte数组的上界
Dim lngLength As Long '添加的字符串的长度
Dim i As Long
abyt = str
lngUb = UBound(abyt)
lngLength = (lngUb + 1) \ 2
Do While lngLength > mlngCapacity '插入新的字符超出缓冲区容量
mlngUb = mlngUb + 4096
ReDim mabyt(mlngUb) '缓冲区扩容
mlngCapacity = mlngCapacity + 2048
Loop
For i = 0 To lngUb
mabyt(mlngEOA + i) = abyt(i)
Next
mlngEOA = mlngEOA + lngUb + 1
mlngCapacity = mlngCapacity - lngLength
mlngLength = mlngLength + lngLength
Erase abyt
End Sub
Public Property Get length() As Long
length = mlngLength
End Property
Public Property Get capacity() As Long
capacity = mlngCapacity
End Property
Public Function toString() As String
ReDim Preserve mabyt(mlngEOA - 1)
toString = mabyt
ReDim Preserve mabyt(mlngUb)
End Function