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());
