登錄

數(shù)據(jù)流

百科 > 互聯(lián)網(wǎng) > 數(shù)據(jù)流

1.什么是數(shù)據(jù)流[1]

數(shù)據(jù)流是指一組有順序的、有起點和終點的字節(jié)集合,程序從鍵盤接收數(shù)據(jù)或向文件中寫數(shù)據(jù),以及在網(wǎng)絡(luò)連接上進行數(shù)據(jù)的讀寫操作,都可以使用數(shù)據(jù)流來完成。數(shù)據(jù)流的概念如圖1所示。
Image:數(shù)據(jù)流概念.jpg

2.數(shù)據(jù)流的分類[2]

數(shù)據(jù)的性質(zhì)、格式不同,則對流的處理方法也不同,因此,在Java的輸入/輸出類庫中,有不同的流類來對應(yīng)不同性質(zhì)的輸入/輸出流。在java.io包中,基本輸入/輸出流類可按其讀寫數(shù)據(jù)的類型之不同分為兩種:字節(jié)流和字符流。

(1)輸入流與輸出流

數(shù)據(jù)流分為輸入流(InputStream)和輸出流(OutputStream)兩類。輸入流只能讀不能寫,而輸出流只能寫不能讀。通常程序中使用輸入流讀出數(shù)據(jù),輸出流寫入數(shù)據(jù),就好像數(shù)據(jù)流入到程序并從程序中流出。采用數(shù)據(jù)流使程序的輸入輸出操作獨立與相關(guān)設(shè)備。

輸入流可從鍵盤或文件中獲得數(shù)據(jù),輸出流可向顯示器、打印機或文件中傳輸數(shù)據(jù)。

(2)緩沖流

為了提高數(shù)據(jù)的傳輸效率,通常使用緩沖流(Buffered Stream),即為一個流配有一個緩沖區(qū)(buffer),一個緩沖區(qū)就是專門用于傳輸數(shù)據(jù)的內(nèi)存塊。當向一個緩沖流寫入數(shù)據(jù)時,系統(tǒng)不直接發(fā)送到外部設(shè)備,而是將數(shù)據(jù)發(fā)送到緩沖區(qū)。緩沖區(qū)自動記錄數(shù)據(jù),當緩沖區(qū)滿時,系統(tǒng)將數(shù)據(jù)全部發(fā)送到相應(yīng)的設(shè)備。

當從一個緩沖流中讀取數(shù)據(jù)時,系統(tǒng)實際是從緩沖區(qū)中讀取數(shù)據(jù)。當緩沖區(qū)空時,系統(tǒng)就會從相關(guān)設(shè)備自動讀取數(shù)據(jù),并讀取盡可能多的數(shù)據(jù)充滿緩沖區(qū)。

3.數(shù)據(jù)流的基本操作[3]

1.生成數(shù)據(jù)流的基本過程

數(shù)據(jù)流由一系列的節(jié)點組成,當數(shù)據(jù)通過每個節(jié)點時,節(jié)點對它進行定義好的操作。建立數(shù)據(jù)流通常遵循以下4個步驟:

(1)向數(shù)據(jù)流區(qū)域增添新的節(jié)點;

(2)將這些節(jié)點連接到數(shù)據(jù)流中;

(3)設(shè)定數(shù)據(jù)節(jié)點或數(shù)據(jù)流的功能:

(4)運行數(shù)據(jù)流。

2.向數(shù)據(jù)流區(qū)域添加,刪除節(jié)點

當向數(shù)據(jù)流區(qū)域添加新的節(jié)點時,通過下面3種方法均可實現(xiàn):

(1)雙擊選項板區(qū)中待添加的節(jié)點。

(2)單擊待添加節(jié)點,按住鼠標不放,將其拖入數(shù)據(jù)流區(qū)域內(nèi)。

(3)先選中選項板區(qū)中待添加的節(jié)點,然后將鼠標放入數(shù)據(jù)流區(qū)域,在鼠標變?yōu)槭中螘r單擊數(shù)據(jù)流區(qū)域的任何空白處。

通過上面3種方法都將發(fā)現(xiàn)選中的節(jié)點出現(xiàn)在了數(shù)據(jù)流區(qū)域內(nèi)。當不再需要數(shù)據(jù)流區(qū)域內(nèi)的某個節(jié)點時,可以通過以下兩種方法來刪除:

(1)單擊待刪除的節(jié)點,按Delete鍵刪除。

(2)右擊待刪除的節(jié)點,在快捷菜單中選擇delete命令。

注意,刪除一個節(jié)點后,與之相連的所有連接也將一并被刪除。

3.將節(jié)點連接到數(shù)據(jù)流中

上面介紹了將節(jié)點添加到數(shù)據(jù)流區(qū)域的方法,然而要使節(jié)點真正發(fā)揮作用,需要把節(jié)點連接到數(shù)據(jù)流中。以下有3種方法可將節(jié)點連接到數(shù)據(jù)流中:

(1)雙擊節(jié)點。首先選中數(shù)據(jù)流中要連接新節(jié)點的節(jié)點(起始節(jié)點),然后雙擊選項板區(qū)中要添加到數(shù)據(jù)流的節(jié)點(目標節(jié)點),這樣新節(jié)點會出現(xiàn)在數(shù)據(jù)流區(qū)域,并自動建立從起始節(jié)點到目標節(jié)點的連接。

(2)通過Alt鍵連接。首先在數(shù)據(jù)流中選中連接起始節(jié)點,按住Alt鍵不放,然后用鼠標將起始節(jié)點拖曳到目標節(jié)點后放開,連接便自動生成。

(3)手動連接。右擊待連接的起始節(jié)點,從彈出的快捷菜單中選擇“連接…”命令,然后用鼠標單擊目標節(jié)點,連接便自動生成。

需要注意的是,并不是任何兩個節(jié)點之間都可以建立連接。

4.繞過數(shù)據(jù)流中的節(jié)點

當暫時不需要數(shù)據(jù)流中的某個節(jié)點時可以繞過該節(jié)點。在繞過它時,如果該節(jié)點既有輸入節(jié)點又有輸出節(jié)點,那么它的輸入節(jié)點和輸出節(jié)點便直接相連;如果該節(jié)點沒有輸出結(jié)點,那么繞過該節(jié)點時與這個節(jié)點相連的所有連接便被取消。

方法:按住Alt鍵不放,然后雙擊數(shù)據(jù)流中需要繞過的節(jié)點,如圖2所示。

Image:繞過節(jié)點前后對比.jpg

5.將節(jié)點插入已存在的連接中

當需要在兩個已連接的節(jié)點中再插入一個節(jié)點時,可以用鼠標將連接拖到要插入的節(jié)點上,即可將節(jié)點插入到連接中,如圖3所示。同時原來兩個節(jié)點間的連接被刪除。
Image:在連接中插入新節(jié)點.jpg

6.刪除連接

當某個連接不再需要時,可以通過以下兩種方法將其刪除:

(1)選擇待刪除的連接,右擊,從彈出的快捷菜單中選擇“刪除連接”命令。

(2)選擇待刪除連接的節(jié)點,按F3鍵,刪除所有連接到該節(jié)點上的連接。

7.數(shù)據(jù)流的執(zhí)行

數(shù)據(jù)流構(gòu)建好后要通過執(zhí)行數(shù)據(jù)流數(shù)據(jù)才能從讀入開始流向各個數(shù)據(jù)節(jié)點。執(zhí)行數(shù)據(jù)流的方法有以下3種。

(1)單擊菜單欄中的?按鈕,數(shù)據(jù)流區(qū)域內(nèi)的所有數(shù)據(jù)流將被執(zhí)行。

(2)先選擇要輸出的數(shù)據(jù)流,再單擊菜單欄中的?按鈕,被選的數(shù)據(jù)流將被執(zhí)行。

(3)選擇要執(zhí)行的數(shù)據(jù)流中的輸出節(jié)點,右擊,在彈出的快捷菜單中選擇“執(zhí)行”命令,執(zhí)行被選中的節(jié)點。

4.數(shù)據(jù)流描述方式[4]

一般使用持續(xù)賦值語句描述數(shù)據(jù)流程的運動路徑、運動方向和運動結(jié)果的設(shè)計方法,稱為數(shù)據(jù)流描述方法。

【例】module NAND2_G(A,B,F); //模塊聲明及輸入輸出端口列表

input A,B; //定義輸入端口

output F; //定義輸出端口

assign F=~(A&B); //數(shù)據(jù)流描述

endmodule //模塊結(jié)束

對于表達式assign F=~(A&B);右邊的操作數(shù)A、B無論何時發(fā)生變化,都會引起表達式值的重新計算,并將重新計算后的值賦予左邊的網(wǎng)線變量F。

評論  |   0條評論