登錄

數(shù)據(jù)流

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

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

數(shù)據(jù)流是指一組有順序的、有起點(diǎn)和終點(diǎn)的字節(jié)集合,程序從鍵盤接收數(shù)據(jù)或向文件中寫數(shù)據(jù),以及在網(wǎng)絡(luò)連接上進(jìn)行數(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ù)流使程序的輸入輸出操作獨(dú)立與相關(guān)設(shè)備。

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

(2)緩沖流

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

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

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

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

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

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

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

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

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

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

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

(1)雙擊選項(xiàng)板區(qū)中待添加的節(jié)點(diǎn)。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

6.刪除連接

當(dāng)某個(gè)連接不再需要時(shí),可以通過以下兩種方法將其刪除:

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

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

7.?dāng)?shù)據(jù)流的執(zhí)行

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

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

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

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

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

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

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

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

output F; //定義輸出端口

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

endmodule //模塊結(jié)束

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

評論  |   0條評論