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 )
描述: 將位元組從銀行寫入流
返回值: 成功寫入流的位元組數