數(shù)據(jù)流
1.什么是數(shù)據(jù)流[1]
2.數(shù)據(jù)流的分類[2]
數(shù)據(jù)的性質(zhì)、格式不同,則對(duì)流的處理方法也不同,因此,在Java的輸入/輸出類庫(kù)中,有不同的流類來(lái)對(duì)應(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ù)流的基本過(guò)程
數(shù)據(jù)流由一系列的節(jié)點(diǎn)組成,當(dāng)數(shù)據(jù)通過(guò)每個(gè)節(jié)點(diǎn)時(shí),節(jié)點(diǎn)對(duì)它進(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í),通過(guò)下面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ū)域的任何空白處。
通過(guò)上面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í),可以通過(guò)以下兩種方法來(lái)刪除:
(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)通過(guò)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.繞過(guò)數(shù)據(jù)流中的節(jié)點(diǎn)
當(dāng)暫時(shí)不需要數(shù)據(jù)流中的某個(gè)節(jié)點(diǎn)時(shí)可以繞過(guò)該節(jié)點(diǎn)。在繞過(guò)它時(shí),如果該節(jié)點(diǎn)既有輸入節(jié)點(diǎn)又有輸出節(jié)點(diǎn),那么它的輸入節(jié)點(diǎn)和輸出節(jié)點(diǎn)便直接相連;如果該節(jié)點(diǎn)沒(méi)有輸出結(jié)點(diǎn),那么繞過(guò)該節(jié)點(diǎn)時(shí)與這個(gè)節(jié)點(diǎn)相連的所有連接便被取消。
方法:按住Alt鍵不放,然后雙擊數(shù)據(jù)流中需要繞過(guò)的節(jié)點(diǎn),如圖2所示。
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í)原來(lái)兩個(gè)節(jié)點(diǎn)間的連接被刪除。6.刪除連接
當(dāng)某個(gè)連接不再需要時(shí),可以通過(guò)以下兩種方法將其刪除:
(1)選擇待刪除的連接,右擊,從彈出的快捷菜單中選擇“刪除連接”命令。
(2)選擇待刪除連接的節(jié)點(diǎn),按F3鍵,刪除所有連接到該節(jié)點(diǎn)上的連接。
7.?dāng)?shù)據(jù)流的執(zhí)行
數(shù)據(jù)流構(gòu)建好后要通過(guò)執(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ù)賦值語(yǔ)句描述數(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é)束
對(duì)于表達(dá)式assign F=~(A&B);右邊的操作數(shù)A、B無(wú)論何時(shí)發(fā)生變化,都會(huì)引起表達(dá)式值的重新計(jì)算,并將重新計(jì)算后的值賦予左邊的網(wǎng)線變量F。