1. 程式人生 > 其它 >django-rest-framework 基礎二 序列化器和路由

django-rest-framework 基礎二 序列化器和路由

NIO中,Buffer都是搭配Channel來使用的,充當儲存資料的角色。

三個重要屬性

capacity: 為Buffer指定儲存容量。

limit:在寫模式下表示Buffer最多可寫入多少資料,在讀模式下表示Buffer中最多有多少可讀的資料。

position:表示當前寫入資料的位置,初始值為0,當一個數據插入時position會移動到下一個可插入的Buffer單元,在讀資料的時候,需要呼叫buffer.flip()轉換為讀模式,這時position指向0。

分配和寫資料

分配容量:allocate(int capacity)

寫資料:將資料寫入到Buffer

  1. 呼叫Channelread()

  2. 呼叫Buffer自身的put()

讀資料:從Buffer中取資料。

  1. 呼叫Channelwrite()
  2. 呼叫Buffer自身的get()

幾個方法

rewind():將position設為0。

clear():清空Bufferposition設為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());