資料讀取 寫入 環型快取區

2021-07-26 21:26:02 字數 2661 閱讀 4148

資料的讀取和寫入管理,可以通過列表和環型列表來實現,文字使用環型列表來實現資料的讀取和寫入操作,當寫資料超過緩衝區大小時,通過讀寫位置重複利用已讀取的區域寫入資料值。

**:

/*

描述: 環型快取區操作類

說明: 本類對記憶體做環型快取區管理

*/#ifndef __circlebuffer_h__

#define __circlebuffer_h__

#pragma once

#include #include using namespace std;

//幀型別

typedef enum e_frametype

frametype;

//幀資料

typedef struct tagframedataframedata;

class circlebuffer

;#endif

#include "stdafx.h"

#include "circlebuffer.h"

#include #include #include typedef boost::shared_lockboost_share_lock;

typedef boost::unique_lockboost_unique_lock;

circlebuffer::circlebuffer(void)

circlebuffer::~circlebuffer(void)

int circlebuffer::iabs(int x)

//初始化

bool circlebuffer::init(int ntotaldatabufferlength,int nframesize)

m_pbufferdata = new unsigned char[ntotaldatabufferlength];

if(!m_pbufferdata)

m_nbuffersize = ntotaldatabufferlength;

m_nbufferemptysize = ntotaldatabufferlength;

m_nbufferreadpos = 0;

m_nbufferwritepos = 0;

m_nframesize = nframesize;

m_nframeemptysize = m_nframesize;

m_nframereadpos = 0;

m_nframewritepos = 0;

m_pallframedata = new framedata[m_nframesize];

for(int j=0; jm_nframereadpos) }

else

else

}return uidifftime;

}//重置幀

void circlebuffer::reset()

else

m_nframeemptysize = m_nframesize - nframenumtmp;

} else

if(m_nlastvideoiframepos != -1 && m_nframereadpos == m_nlastvideoiframepos)

if(m_nlastaudioiframepos != -1 && m_nframereadpos == m_nlastaudioiframepos)

m_nframereadpos++;

if(m_nframereadpos >= m_nframesize)

m_nframeemptysize++;

if(m_nframeemptysize >= m_nframesize)

return 0;

}//寫入一幀資料

int circlebuffer::writeframedata(int nframetype,unsigned char *pframedata,int nframedatalength)

if(m_nbufferemptysize < nframedatalength)

memcpy((void *)&m_pallframedata[m_nframewritepos].ulltimestamp,(void *)pframedata,8);//時間戳

m_pallframedata[m_nframewritepos].nframetype = nframetype;

m_pallframedata[m_nframewritepos].nframedatalength = nframedatalength;

if((m_nbuffersize - m_nbufferwritepos) >= nframedatalength)

else

if(nframetype == frametype_video_iframe)

else if(nframetype == frametype_audio_frame)

m_nframewritepos++;

if(m_nframewritepos >= m_nframesize)

m_nframeemptysize--;

if(m_nframeemptysize <= 0)

if(m_nbufferemptysize <= 0)

return 0;

}

寫入hdfs HDFS讀取和寫入資料簡介

hdfs 的檔案訪問機制為流式訪問機制,即通過 api 開啟檔案的某個資料塊之後,可以順序讀取或者寫入某個檔案。由於 hdfs 中存在多個角色,且對應的應用場景主要為一次寫入 多次讀取的場景,因此其讀和寫的方式有較大不同。讀 寫操作都由客戶端發起,並且由客戶端進行整個流程的控制,namenode 和...

快取資料讀取錯誤

今天遇到乙個問題,在乙個伺服器上里部署了兩套專案程式,資料庫兩份,分別使用30和31的快取,但是出現三種現象,一是登入時取不到快取中的資料,二是乙個專案登入另乙個也登入了,三是乙個專案取到別的專案裡的資料。主要原因是兩個的快取存資料和取資料不一致,例如1 30存,31取 現象一是,專案2 有uid ...

操作型資料儲存區

url 操作型資料儲存區 ods,operational data store 是為了彌補業務系統和資料倉儲之間的資料同步差距而提出的,要解決的問題 對乙個特定的業務流程來說,怎麼才能提供最新的 跨功能部門之 間的資訊 例如對客戶服務人員,他需要銷售 庫存 市場和研發等各部門的最新資料,而這些資料原...