BlitzMax/模块/杂项/银行
银行对象封装了一个内存块,您可以使用它来存储任意数据。
银行对于存储类型不固定的数据很有用,例如二进制文件的内容。
要创建银行,请使用 CreateBank 命令。
要将数据写入银行,请使用其中一个“Poke”样式命令,例如 PokeByte。
要从银行读取数据,请使用其中一个“Peek”样式命令,例如 PeekByte。
此外,可以使用 LoadBank 或 SaveBank 加载或保存银行。
内存库
- Buf
- Lock
- Unlock
- Size
- Capacity
- Resize
- Read
- Write
- PeekByte
- PokeByte
- PeekShort
- PokeShort
- PeekInt
- PokeInt
- PeekLong
- PokeLong
- PeekFloat
- PokeFloat
- PeekDouble
- PokeDouble
- Save
- Load
- Create
- CreateStatic
方法 Buf:Byte Ptr()
描述: 获取银行的内存指针
返回值: 指向银行控制的内存块的字节指针
信息: 请使用Lock 和 Unlock 而不是此方法。
方法 Lock:Byte Ptr()
描述: 锁定银行的内存块
返回值: 指向银行控制的内存块的字节指针
信息: 锁定后,无法调整银行的大小。
在您完成使用银行的内存块后,必须使用Unlock 将其返回到银行。
方法 Unlock()
描述: 解锁银行的内存指针
信息: 在您完成使用银行的内存块后,必须使用Unlock 将其返回到银行。
方法 Size()
描述: 获取银行的大小
返回值: 银行控制的内存块的大小(以字节为单位)
方法 Capacity()
描述: 获取银行的容量
返回值: 银行内部内存缓冲区的容量(以字节为单位)
方法 Resize( size )
描述: 调整银行的大小
方法 Read( stream:TStream,offset,count )
描述: 从流中读取字节到银行
方法 Write( stream:TStream,offset,count )
描述: 将银行中的字节写入流
方法 PeekByte( offset )
描述: 从银行中窥视字节
返回值: 银行中指定字节偏移处的字节值
方法 PokeByte( offset,value )
描述: 将字节放入银行
方法 PeekShort( offset )
描述: 从银行中窥视短整型
返回值: 银行中指定字节偏移处的短整型值
方法 PokeShort( offset,value )
描述: 将短整型放入银行
方法 PeekInt( offset )
描述: 从银行中窥视整型
返回值: 银行中指定字节偏移处的整型值
方法 PokeInt( offset,value )
描述: 将整型放入银行
方法 PeekLong:Long( offset )
描述: 从银行中窥视长整型
返回值: 银行中指定字节偏移处的长整型值
方法 PokeLong( offset,value:Long )
描述: 将长整型值放入银行
方法 PeekFloat#( offset )
描述: 从银行中窥视浮点型
返回值: 银行中指定字节偏移处的浮点型值
方法 PokeFloat( offset,value# )
描述: 将浮点型值放入银行
方法 PeekDouble!( offset )
描述: 从银行中窥视双精度浮点型
返回值: 银行中指定字节偏移处的双精度浮点型值
方法 PokeDouble( offset,value! )
描述: 将双精度浮点型值放入银行
方法 Save( url:Object )
描述: 将银行保存到流
信息: 成功返回 True,否则返回 False。
函数 Load:TBank( url:Object )
描述: 从流中加载银行
返回值: 一个新的 TBank 对象
信息: 成功返回一个新的 TBank 对象,否则返回 Null。
函数 Create:TBank( size )
描述: 创建银行
返回值: 一个新的 TBank 对象,其初始大小为 size
函数 CreateStatic:TBank( buf:Byte Ptr,size )
描述: 从现有的内存块创建银行
函数 CreateBank:TBank( size=0 )
描述: 创建银行
返回值: 一个初始大小为 size 字节的银行对象
信息: CreateBank 创建一个银行,分配指定数量的内存,可以使用各种 Poke 和 Peek 命令用于存储二进制数据。
注释: 银行是分配给 TBank 的内存块,它们是这样分配的。
Global MyVar:TBank = CreateBank( SizeInBytes )
这将创建一个 SizeInBytes 的银行,并将指向它的指针存储在 MyVar 中。
银行非常适合转换工作,例如在类型和压缩技术之间进行转换。
Function LongToStr:String( Value:Long ) Local TempBank:TBank = CreateBank( 8 ) ' On eight bytes for the long (ints are 4 bytes) Local TempString:String = "" PokeLong( TempBank,0,Value ) ' Poke Value into TempBank at offset 0, the first byte for the eight bytes of the long value For Li:Int = 0 To 7 TempString :+ Chr( PeekByte( TempBank,Li ) ) ' Read the bytes from the bank Next Return TempString End Function
这个简单的函数将长整型转换为它的八字节表示。这对网络系统等很有用,所以它不会发送 640000000000,而只会发送八字节。银行还有其他用途,它们的用途似乎无穷无尽。
函数 CreateStaticBank:TBank( buf:Byte Ptr,size )
描述: 使用现有数据创建银行
返回值: 一个引用现有内存块的银行对象
信息: 静态银行引用的内存不会在银行被删除时释放。无法调整静态银行的大小。
函数 LoadBank:TBank( url:Object )
描述: 加载银行
返回值: 包含 url 二进制内容的银行,如果无法打开 url,则为 null
信息: LoadBank 从指定的 url 读取二进制文件的全部内容到一个新创建的银行中,其大小与文件的大小一致。
Function SaveBank( bank:TBank,url:Object )
描述: 保存一个银行
返回值: 如果成功,则返回 True。
信息: SaveBank 将其全部内容写入 url。如果 url 是一个文件路径,则会创建一个新文件。
Function BankBuf:Byte Ptr( bank:TBank )
描述: 获取银行的内存缓冲区
返回值: 指向银行内部内存缓冲区的字节指针
信息: 请使用 LockBank 和 UnlockBank,而不是此方法。
Function LockBank:Byte Ptr( bank:TBank )
描述: 锁定银行的内存块
返回值: 指向银行控制的内存块的字节指针。
信息: 锁定后,无法调整银行的大小。
完成对银行内存块的操作后,必须使用 UnlockBank 将其返回到银行。
Function UnlockBank( bank:TBank )
描述: 解锁银行的内存块
信息: 完成对银行内存块的操作后,必须使用 UnlockBank 将其返回到银行。
Function BankSize( bank:TBank )
描述: 获取银行的大小
返回值: 银行内部内存缓冲区的大小(以字节为单位)
Function BankCapacity( bank:TBank )
描述: 获取银行的容量
返回值: 银行内部内存缓冲区的容量(以字节为单位)
信息: 银行的容量是银行在由于调整大小而必须分配更多内存之前的大小限制。由于调用 ResizeBank,银行容量可能会增加 50% 或请求的大小,以较大者为准。容量永远不会减少。
Function ResizeBank( bank:TBank,size )
描述: 调整银行的大小
信息: ResizeBank 修改银行的大小限制。如果请求的大小大于银行的当前容量,这可能会导致分配内存,有关更多信息,请参见 BankCapacity。
Function CopyBank( src_bank:TBank,src_offset,dst_bank:TBank,dst_offset,count )
描述: 复制银行内容
信息: CopyBank 将 src_bank 中 src_offset 处的 count 个字节复制到 dst_bank 中 dst_offset 处。
Function PeekByte( bank:TBank,offset )
描述: 从银行中窥视字节
返回值: 银行中指定字节偏移处的字节值
信息: 字节是一个无符号 8 位值,范围为 0..255。
Function PokeByte( bank:TBank,offset,value )
描述: 将字节放入银行
Function PeekShort( bank:TBank,offset )
描述: 从银行中窥视短整型
返回值: 银行中指定字节偏移处的短整型值
信息: 短整数是一个无符号 16 位(2 个字节)值,范围为 0..65535。
Function PokeShort( bank:TBank,offset,value )
描述: 将短整型放入银行
信息: 短整数是一个无符号 16 位值,需要 2 个字节的存储空间。
Function PeekInt( bank:TBank,offset )
描述: 从银行中窥视整型
返回值: 银行中指定字节偏移处的整型值
信息: 整数是一个有符号 32 位值(4 个字节)。
Function PokeInt( bank:TBank,offset,value )
描述: 将整型放入银行
信息: 整数是一个有符号 32 位值,需要 4 个字节的存储空间。
Function PeekLong:Long( bank:TBank,offset )
描述: 从银行中查看一个长整数
返回值: 银行中指定字节偏移量处的长整数值
信息: 长整数是一个 64 位整数,需要 8 个字节的内存。
Function PokeLong( bank:TBank,offset,value:Long )
描述: 将一个长整数写入银行
信息: 长整数是一个 64 位整数,需要 8 个字节的存储空间。
Function PeekFloat#( bank:TBank,offset )
描述: 从银行中窥视浮点型
返回值: 银行中指定字节偏移处的浮点型值
信息: 浮点数需要 4 个字节的存储空间
Function PokeFloat( bank:TBank,offset,value# )
描述: 将一个浮点数写入银行
信息: 浮点数需要 4 个字节的存储空间
Function PeekDouble!( bank:TBank,offset )
描述: 从银行中窥视双精度浮点型
返回值: 银行中指定字节偏移处的双精度浮点型值
信息: 双精度浮点数需要 8 个字节的存储空间
Function PokeDouble( bank:TBank,offset,value! )
描述: 将一个双精度浮点数写入银行
信息: 双精度浮点数需要 8 个字节的存储空间
Function ReadBank( bank:TBank,stream:TStream,offset,count )
描述: 从流读取字节到银行
返回值: 从流中成功读取的字节数
Function WriteBank( bank:TBank,stream:TStream,offset,count )
描述: 将字节从银行写入流
返回值: 成功写入流的字节数