django-rest-framework 基礎二 序列化器和路由
阿新 • • 發佈:2022-05-10
在NIO
中,Buffer
都是搭配Channel
來使用的,充當儲存資料的角色。
三個重要屬性
capacity: 為Buffer
指定儲存容量。
limit:在寫模式下表示Buffer
最多可寫入多少資料,在讀模式下表示Buffer
中最多有多少可讀的資料。
position:表示當前寫入資料的位置,初始值為0,當一個數據插入時position
會移動到下一個可插入的Buffer
單元,在讀資料的時候,需要呼叫buffer.flip()
轉換為讀模式,這時position
指向0。
分配和寫資料
分配容量:allocate(int capacity)
。
寫資料:將資料寫入到Buffer
。
-
呼叫
Channel
的read()
-
呼叫
Buffer
自身的put()
。
讀資料:從Buffer
中取資料。
- 呼叫
Channel
的write()
。 - 呼叫
Buffer
自身的get()
。
幾個方法
rewind()
:將position
設為0。
clear()
:清空Buffer
,position
設為0,limit
設為capacity
。
compact()
: 只會清除讀過的資料,將所有未讀的資料拷貝到Buffer
起始處,position
設為最後一個未讀元素後面,limit
設為capacity
。
mark()
和reset()
:標記Buffer
中的一個特定position
,通過reset()
恢復到這個position
。
緩衝區
Buffer
子緩衝區
// 建立子緩衝區
buffer.position(3);
buffer.limit(7);
ByteBuffer slice = buffer.slice();
// 改變子緩衝區內容
for (int i = 0; i < slice.capacity(); i++) {
byte b = slice.get();
b *= 10;
slice.put(i, b);
}
你可以改變子緩衝區的內容,這時你再獲取Buffer中的內容時,資料已經發生了變化。
直接緩衝區
主要作用就是加快IO速度。
// 建立直接緩衝區 ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
記憶體對映檔案IO
比常規的基於流或者基於通道的IO快得多,將檔案實際讀取或者寫入的資料對映到記憶體中。
MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, channel.size());