跳转到内容

BlitzMax/模块/杂项/银行

来自 Wikibooks,开放世界中的开放书籍

银行对象封装了一个内存块,您可以使用它来存储任意数据。

银行对于存储类型不固定的数据很有用,例如二进制文件的内容。

要创建银行,请使用 CreateBank 命令。

要将数据写入银行,请使用其中一个“Poke”样式命令,例如 PokeByte

要从银行读取数据,请使用其中一个“Peek”样式命令,例如 PeekByte

此外,可以使用 LoadBankSaveBank 加载或保存银行。

内存库

方法
  • Buf
  • Lock
  • Unlock
  • Size
  • Capacity
  • Resize
  • Read
  • Write
  • PeekByte
  • PokeByte
  • PeekShort
  • PokeShort
  • PeekInt
  • PokeInt
  • PeekLong
  • PokeLong
  • PeekFloat
  • PokeFloat
  • PeekDouble
  • PokeDouble
  • Save
函数
  • Load
  • Create
  • CreateStatic

TBank: 方法

[编辑 | 编辑源代码]
Buf

方法 Buf:Byte Ptr()

描述: 获取银行的内存指针

返回值: 指向银行控制的内存块的字节指针

信息: 请使用LockUnlock 而不是此方法。

Lock

方法 Lock:Byte Ptr()

描述: 锁定银行的内存块

返回值: 指向银行控制的内存块的字节指针

信息: 锁定后,无法调整银行的大小。

在您完成使用银行的内存块后,必须使用Unlock 将其返回到银行。

Unlock

方法 Unlock()

描述: 解锁银行的内存指针

信息: 在您完成使用银行的内存块后,必须使用Unlock 将其返回到银行。

Size

方法 Size()

描述: 获取银行的大小

返回值: 银行控制的内存块的大小(以字节为单位)

Capacity

方法 Capacity()

描述: 获取银行的容量

返回值: 银行内部内存缓冲区的容量(以字节为单位)

Resize

方法 Resize( size )

描述: 调整银行的大小

Read

方法 Read( stream:TStream,offset,count )

描述: 从流中读取字节到银行

Write

方法 Write( stream:TStream,offset,count )

描述: 将银行中的字节写入流

PeekByte

方法 PeekByte( offset )

描述: 从银行中窥视字节

返回值: 银行中指定字节偏移处的字节值

PokeByte

方法 PokeByte( offset,value )

描述: 将字节放入银行

PeekShort

方法 PeekShort( offset )

描述: 从银行中窥视短整型

返回值: 银行中指定字节偏移处的短整型值

PokeShort

方法 PokeShort( offset,value )

描述: 将短整型放入银行

PeekInt

方法 PeekInt( offset )

描述: 从银行中窥视整型

返回值: 银行中指定字节偏移处的整型值

PokeInt

方法 PokeInt( offset,value )

描述: 将整型放入银行

PeekLong

方法 PeekLong:Long( offset )

描述: 从银行中窥视长整型

返回值: 银行中指定字节偏移处的长整型值

PokeLong

方法 PokeLong( offset,value:Long )

描述: 将长整型值放入银行

PeekFloat

方法 PeekFloat#( offset )

描述: 从银行中窥视浮点型

返回值: 银行中指定字节偏移处的浮点型值

PokeFloat

方法 PokeFloat( offset,value# )

描述: 将浮点型值放入银行

PeekDouble

方法 PeekDouble!( offset )

描述: 从银行中窥视双精度浮点型

返回值: 银行中指定字节偏移处的双精度浮点型值

PokeDouble

方法 PokeDouble( offset,value! )

描述: 将双精度浮点型值放入银行

Save

方法 Save( url:Object )

描述: 将银行保存到流

信息: 成功返回 True,否则返回 False。

TBank: 函数

[编辑 | 编辑源代码]
Load

函数 Load:TBank( url:Object )

描述: 从流中加载银行

返回值: 一个新的 TBank 对象

信息: 成功返回一个新的 TBank 对象,否则返回 Null。

Create

函数 Create:TBank( size )

描述: 创建银行

返回值: 一个新的 TBank 对象,其初始大小为 size

CreateStatic

函数 CreateStatic:TBank( buf:Byte Ptr,size )

描述: 从现有的内存块创建银行

CreateBank

[编辑 | 编辑源代码]

函数 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

[编辑 | 编辑源代码]

函数 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 )

描述: 获取银行的内存缓冲区

返回值: 指向银行内部内存缓冲区的字节指针

信息: 请使用 LockBankUnlockBank,而不是此方法。

Function LockBank:Byte Ptr( bank:TBank )

描述: 锁定银行的内存块

返回值: 指向银行控制的内存块的字节指针。

信息: 锁定后,无法调整银行的大小。

完成对银行内存块的操作后,必须使用 UnlockBank 将其返回到银行。

UnlockBank

[编辑 | 编辑源代码]

Function UnlockBank( bank:TBank )

描述: 解锁银行的内存块

信息: 完成对银行内存块的操作后,必须使用 UnlockBank 将其返回到银行。

Function BankSize( bank:TBank )

描述: 获取银行的大小

返回值: 银行内部内存缓冲区的大小(以字节为单位)

BankCapacity

[编辑 | 编辑源代码]

Function BankCapacity( bank:TBank )

描述: 获取银行的容量

返回值: 银行内部内存缓冲区的容量(以字节为单位)

信息: 银行的容量是银行在由于调整大小而必须分配更多内存之前的大小限制。由于调用 ResizeBank,银行容量可能会增加 50% 或请求的大小,以较大者为准。容量永远不会减少。

ResizeBank

[编辑 | 编辑源代码]

Function ResizeBank( bank:TBank,size )

描述: 调整银行的大小

信息: ResizeBank 修改银行的大小限制。如果请求的大小大于银行的当前容量,这可能会导致分配内存,有关更多信息,请参见 BankCapacity

Function CopyBank( src_bank:TBank,src_offset,dst_bank:TBank,dst_offset,count )

描述: 复制银行内容

信息: CopyBanksrc_banksrc_offset 处的 count 个字节复制到 dst_bankdst_offset 处。

Function PeekByte( bank:TBank,offset )

描述: 从银行中窥视字节

返回值: 银行中指定字节偏移处的字节值

信息: 字节是一个无符号 8 位值,范围为 0..255。

Function PokeByte( bank:TBank,offset,value )

描述: 将字节放入银行

PeekShort

[编辑 | 编辑源代码]

Function PeekShort( bank:TBank,offset )

描述: 从银行中窥视短整型

返回值: 银行中指定字节偏移处的短整型值

信息: 短整数是一个无符号 16 位(2 个字节)值,范围为 0..65535。

PokeShort

[编辑 | 编辑源代码]

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 个字节的存储空间。

PeekFloat

[编辑 | 编辑源代码]

Function PeekFloat#( bank:TBank,offset )

描述: 从银行中窥视浮点型

返回值: 银行中指定字节偏移处的浮点型值

信息: 浮点数需要 4 个字节的存储空间

PokeFloat

[编辑 | 编辑源代码]

Function PokeFloat( bank:TBank,offset,value# )

描述: 将一个浮点数写入银行

信息: 浮点数需要 4 个字节的存储空间

PeekDouble

[编辑 | 编辑源代码]

Function PeekDouble!( bank:TBank,offset )

描述: 从银行中窥视双精度浮点型

返回值: 银行中指定字节偏移处的双精度浮点型值

信息: 双精度浮点数需要 8 个字节的存储空间

PokeDouble

[编辑 | 编辑源代码]

Function PokeDouble( bank:TBank,offset,value! )

描述: 将一个双精度浮点数写入银行

信息: 双精度浮点数需要 8 个字节的存储空间

Function ReadBank( bank:TBank,stream:TStream,offset,count )

描述: 从流读取字节到银行

返回值: 从流中成功读取的字节数

WriteBank

[编辑 | 编辑源代码]

Function WriteBank( bank:TBank,stream:TStream,offset,count )

描述: 将字节从银行写入流

返回值: 成功写入流的字节数

华夏公益教科书