跳轉到內容

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 )

描述: 將位元組從銀行寫入流

返回值: 成功寫入流的位元組數

華夏公益教科書