QIODevice (Qt中所有 I/O devices 的基類,QFile,QBuffer,QTcpSocket等)


QIODevice 為支持讀寫數據塊的device提供通用的接和通用的接口,如QFile,QBuffer,QTcpSocket。

QIODevice 是一個抽象類,所以不能被實例化。但通常會用到它定義的接口,這些接口提供設備依賴的I/O特性。例如Qt的XML類通過操作一個QIODevice 的 指針,可以使用各種各樣的設備(files,buffers等)。

在訪問設備之前,先調用open(),並設置正確的OpenMode(例如ReadOnly 或者 ReadWrite)。你可以用write(),putChar()來寫入設備。也可以用read(),readLine()來讀設備。使用完畢后調用close().

QIODevice 區分兩種類型的設備Random-access(隨機讀取) 和 Sequential(順序讀取)。

isSequential()用來判斷具體的類型是啥。

當數據可讀時,QIODevice 發射readyRead()信號,例如新數據抵達網絡,或者附加的數據追加到你正在讀取的文件中。你可以調用bytesAvailable()來確定當前可讀的字節數。在QTcpSocket中(零散的數據可能隨時到達),經常把readyRead()信號和bytesAvailable()一塊用。

當數據已經寫入設備時,QIODevice會放射bytesWriten()信號.btyesToWriten()確定當前將要被寫人的數據的字節數。

某些子類如QTcpSocket 和 QProcess 是異步的。意味着read() 和 write()總是立刻返回。QIODevice提供函數允許你從這些操作中立即返回,當阻塞在調用線程並且沒有進入事件循環時。QIODevice 允許子類在沒有事件循環的情況,或者在一個獨立的線程中使用。

waitForReadyRead()將阻塞線程直到數據到來。

waitForBytesWriten()將阻塞線程直到數據寫入。

waitFor...()子類會實現相應的函數為了特殊的操作。比如QProcess 有個叫waitForStarted()的函數。它將會延遲調用的線程,直到那個process已經啟動。

通過子類化QIODevice ,可以提供相同的接口為自己 I/O設備。QIODevice的子類僅需要實現protected的readData()和writeData(),QIODevice 用這些函數實現了很多方便使用的函數。例如getChar(),readLine(),write()。QIODevice 可以為你提供訪問控制。可以安全的假設當writeData()函數被調用時,設備已打開。

一些子類,如QFile ,QTcpSocket,會使用內存緩沖區實現存儲臨時的數據。這將減少設備訪問的次數,從而提高讀寫效率。它將是getChar(), putChar()這樣的函數更有效率,當你在內存緩沖區中操作數據而不是和訪問設備本身。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM