stream

stream

Stream泛指流媒體技術。流媒體實際指的是一種新的媒體傳送方式,而非一種新的媒體,是指採用流式傳輸的方式在Internet播放的媒體格式。可指大河,也可指小河或小溪,指小溪時與brook,creek同義。creek側重其狹長蜿蜒,緩緩流動,且多流入大河或湖泊。brook側重發源於山泉。creek和stream都比brook大。stream還可引申表示事物連綿不斷。

基本信息

英語單詞

動詞

基本釋義

v. [striːm] ( streams; streamed; streaming )

vt. & vi. 流; 移動 flow freely; move continuously and smoothly in one direction

vi. 飄揚; 招展 float or wave (in the wind)

詞語要點

1.stream的基本意思是“流動”,指受限制的流動,如通過一定的路線或出口。也可指大量不斷地流動。引申可指“飄動”。

2.stream既可用作及物動詞,也可用作不及物動詞。用作及物動詞時,可接名詞或代詞作賓語。

3.stream接介詞with表示“被…覆蓋”。

詞語搭配

~+副詞

stream torrentially 激流湧進

stream back 向後飄動

stream in 絡繹進入

~+介詞

stream behind 在…後面飄動

stream down one's cheeks (眼淚)從臉頰流下

stream into the auditorium (人群)絡繹不絕進入禮堂

stream out of the station (人群)湧出車站

stream with 被…覆蓋

辨析

pour, flow, run, stream

這組詞的共同意思是“流”“流動”。其區別是:

1.flow, run, stream和pour都可指液體流動; flow還可指氣體流動; pour還可指光線、微粒等傾瀉。

2.時間上:flow一般指源源不斷地、長時間地流動; run既可以是源源不斷地、長時間地流動,也可以是流動一段時間; stream和pour多指短時間地流動。

3.方向上:指液體流動時, flow是水平流動; run和stream既可水平流動,也可垂直流動; pour是垂直流動。

4.流速上:從快到慢依次為pour, stream, run, flow。具體說就是flow是平平穩穩地流動; run比較湍急; stream比run更有力; pour則是“傾瀉”。

5.flow, stream和pour常用於比喻, run很少用於比喻。例如:

The river was flowing quietly.河水靜靜流著。

She let her hair down so that it flew darkly over her shoulders.她讓烏黑的頭髮披散下來,飄垂到肩上。  The river runs through hills and fields.河水流經山岡和田野。

The water runs out of the pipe into the bucket.水自管內注入水桶中。

Tears were streaming down her face.她臉上熱淚滾滾而下。

The students streamed into the auditorium.學生們絡繹不絕地進入禮堂。

下面三句話的意思相同:

She poured me a cup of tea.

She poured a cup of tea for me.

She poured me out a cup of tea.

她給我倒了一杯茶。

詞源

<古英語 stream(流動)

名詞

基本釋義

C 小河,溪流 a small river

stream-小溪 stream-小溪

C 流,一股,一串 flow (of liquid, people, things, etc.)

S 水流方向,潮流 current or direction of sth flowing or moving

C (按能力分的)班級 class or division of a class into which children of the same age and level of ability are placed

C 川流不息 a continuous series of people, things, or events, usually moving in a line or in a certain direction

常見搭配

動詞+~

cross a stream 涉過一條小溪

tap a stream 引流

形容詞+~

clear〔dancing, quiet, running〕 stream 清澈〔奔騰歡跳,平靜,流動〕的溪流

rapid〔strong〕 stream 湍急〔強勁〕的水流

rushing stream 激流

名詞+~

mountain stream 山澗

sun streams 太陽光線

介詞+~

in streams 連續不斷,川流不息

on stream 進行生產,投入生產

up the stream 向〔在〕上游

~+介詞

a stream of light 一縷光線

a stream of words 滔滔不絕的話

the stream of history 歷史潮流

詞語辨析

branch,brook,canal,creek,river,stream,torrent

這組詞的共同意思是“流水的通道”。其區別是:

1.除canal指人工開挖的河流或渠道外,其餘各詞均指自然形成的水道。

2.river和torrent均指流量較大的河流,river可泛指(自然形成的)江河;torrent則特指急流、湍流。這兩個詞還常用於比喻。

3.stream可指大河,也可指小河或小溪,指小溪時與brook,creek同義。creek側重其狹長蜿蜒,緩緩流動,且多流入大河或湖泊。brook側重發源於山泉。creek和stream都比brook大。stream還可引申表示事物連綿不斷。

4.branch指江河的支流。

同義詞

n. brook, course, flow, rush, streamlet

IT相關

流媒體技術

Stream泛指流媒體技術。

流媒體實際指的是一種新的媒體傳送方式,而非一種新的媒體,是指採用流式傳輸的方式在Internet播放的媒體格式。流媒體技術全面套用後,人們在網上聊天可直接語音輸入;如果想彼此看見對方的容貌、表情,只要雙方各有一個攝像頭就可以了;在網上看到感興趣的商品,點擊以後,講解員和商品的影像就會跳出來;更有真實感的影像新聞也會出現。

程式語言

程式語言中的stream

重要運算符

在C++,C#,java等程式語言中,有一個stream這個類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的檔案I/O,stream這個類有兩個重要的運算符:

1、插入器(<<)

向流輸出數據。比如說系統有一個默認的標準輸出流(cout),一般情況下就是指的顯示器,所以,cout<<"Write Stdout"<<'n';就表示把字元串"Write Stdout"和換行字元('n')輸出到標準輸出流。

2、析取器(>>)

從流中輸入數據。比如說系統有一個默認的標準輸入流(cin),一般情況下就是指的鍵盤,所以,cin>>x;就表示從標準輸入流中讀取一個指定類型(即變數x的類型)的數據。

在C++中,對檔案的操作是通過stream的子類fstream(file stream)來實現的,所以,要用這種方式操作檔案,就必須加入頭檔案fstream.h。下面就把此類的檔案操作過程一一道來。

打開檔案

在fstream類中,有一個成員函式open(),就是用來打開檔案的,其原型是:

void open(const char* filename,int mode,int access);

參數:

filename: 要打開的檔案名稱

mode: 要打開檔案的方式

access: 打開檔案的屬性

打開檔案的方式在類ios(是所有流式I/O類的基類)中定義,常用的值如下:

ios::app: 以追加的方式打開檔案

ios::ate: 檔案打開後定位到檔案尾,ios:app就包含有此屬性

ios::binary: 以二進制方式打開檔案,預設的方式是文本方式。兩種方式的區別見前文

ios::in: 檔案以輸入方式打開

ios::out: 檔案以輸出方式打開

ios::nocreate: 不建立檔案,所以檔案不存在時打開失敗

ios::noreplace:不覆蓋檔案,所以打開檔案時如果檔案存在失敗

ios::trunc: 如果檔案存在,把檔案長度設為0

可以用“或”把以上屬性連線起來,如ios::out|ios::binary

// 註:現在C++標準庫不支持nocreate和noreplace,以前的舊版本可以用.

打開檔案的屬性取值是:

0:普通檔案,打開訪問

1:唯讀檔案

2:隱含檔案

4:系統檔案

可以用“或”或者“+”把以上屬性連線起來 ,如3或1|2就是以唯讀和隱含屬性打開檔案。

例如:以二進制輸入方式打開檔案c:config.sys

fstream file1;

file1.open("c:config.sys",ios::binary|ios::in,0);

如果open函式只有檔案名稱一個參數,則是以讀/寫普通檔案打開,即:

file1.open("c:config.sys");<=>file1.open("c:config.sys",ios::in|ios::out,0);

另外,fstream還有和open()一樣的構造函式,對於上例,在定義的時候就可以打開檔案了:

fstream file1("c:config.sys");

特別提出的是,fstream有兩個子類:ifstream(input file stream)和ofstream(outpu file stream),ifstream默認以輸入方式打開檔案,而ofstream默認以輸出方式打開檔案。

ifstream file2("c:pdos.def");//以輸入方式打開檔案

ofstream file3("c:x.123");//以輸出方式打開檔案

所以,在實際套用中,根據需要的不同,選擇不同的類來定義:如果想以輸入方式打開,就用ifstream來定義;如果想以輸出方式打開,就用ofstream來定義;如果想以輸入/輸出方式來打開,就用fstream來定義。

關閉檔案

打開的檔案使用完成後一定要關閉,fstream提供了成員函式close()來完成此操作,如:file1.close();就把file1相連的檔案關閉。

讀寫檔案

讀寫檔案分為文本檔案和二進制檔案的讀取,對於文本檔案的讀取比較簡單,用插入器和析取器就可以了;而對於二進制的讀取就要複雜些,下要就詳細的介紹這兩種方式

1、文本檔案的讀寫

文本檔案的讀寫很簡單:用插入器(<<)向檔案輸出;用析取器(>>)從檔案輸入。假設file1是以輸入方式打開,file2以輸出打開。示例如下:

file2<<"I Love You";//向檔案寫入字元串"I Love You"

int i;

file1>>i;//從檔案輸入一個整數值。

這種方式還有一種簡單的格式化能力,比如可以指定輸出為16進制等等,具體的格式有以下一些

操縱符 功能 輸入/輸出

dec 格式化為十進制數值數據 輸入和輸出

endl 輸出一個換行符並刷新此流 輸出

ends 輸出一個空字元 輸出

hex 格式化為十六進制數值數據 輸入和輸出

oct 格式化為八進制數值數據 輸入和輸出

//setprecision(int p) 設定浮點數的精度位數 輸出

(setpxecision應該為setprecision,使用時需要包含頭檔案:#include <iomanip.h>)

//比如要把123當作十六進制輸出:file1<<hex<<123;要把3.1415926以5位精度輸出:file1<<setprecision(5)<<3.1415926。

比如要把123當作十六進制輸出:file1<<hex<<123;要把3.1415926以5位精度輸出:file1<<setprecision(5)<<3.1415926。

2、二進制檔案的讀寫

①put()

put()函式向流寫入一個字元,其原型是ofstream &put(char ch),使用也比較簡單,如file1.put('c');就是向流寫一個字元'c'。

②get()

get()函式比較靈活,有3種常用的重載形式:

一種就是和put()對應的形式:ifstream ≥t(char &ch);功能是從流中讀取一個字元,結果保存在引用ch中,如果到檔案尾,返回空字元。如file2.get(x);表示從檔案中讀取一個字元,並把讀取的字元保存在x中。

另一種重載形式的原型是: int get();這種形式是從流中返回一個字元,如果到達檔案尾,返回EOF,如x=file2.get();和上例功能是一樣的。

還有一種形式的原型是:ifstream ≥t(char *buf,int num,char delim="n");這種形式把字元讀入由 buf 指向的數組,直到讀入了 num 個字元或遇到了由 delim 指定的字元,如果沒使用 delim 這個參數,將使用預設值換行符'n'。例如:

file2.get(str1,127,'A');//從檔案中讀取字元到字元串str1,當遇到字元'A'或讀取了127個字元時終止。

③讀寫數據塊

要讀寫二進制數據塊,使用成員函式read()和write()成員函式,它們原型如下:

read(unsigned char *buf,int num);

write(const unsigned char *buf,int num);

read()從檔案中讀取 num 個字元到 buf 指向的快取中,如果在還未讀入 num 個字元時就到了檔案尾,可以用成員函式 int gcount();來取得實際讀取的字元數;而 write() 從buf 指向的快取寫 num 個字元到檔案中,值得注意的是快取的類型是 unsigned char *,有時可能需要類型轉換。

例:

unsigned char str1[]="I Love You";

int n[5];

ifstream in("xxx.xxx");

ofstream out("yyy.yyy");

out.write(str1,strlen(str1));//把字元串str1全部寫到yyy.yyy中

in.read((unsigned char*)n,sizeof(n));//從xxx.xxx中讀取指定個整數,注意類型轉換

in.close();out.close();

檢測EOF

成員函式eof()用來檢測是否到達檔案尾,如果到達檔案尾返回非0值,否則返回0。原型是int eof();

例: if(in.eof())ShowMessage("已經到達檔案尾!");

檔案定位

和C的檔案操作方式不同的是,C++ I/O系統管理兩個與一個檔案相聯繫的指針。一個是讀指針,它說明輸入操作在檔案中的位置;另一個是寫指針,它下次寫操作的位置。每次執行輸入或輸出時,相應的指針自動變化。所以,C++的檔案定位分為讀位置和寫位置的定位,對應的成員函式是 seekg()和 seekp(),seekg()是設定讀位置,seekp是設定寫位置。它們最通用的形式如下:

istream &seekg(streamoff offset,seek_dir origin);

ostream &seekp(streamoff offset,seek_dir origin);

streamoff定義於 iostream.h 中,定義有偏移量 offset 所能取得的最大值,seek_dir 表示移動的基準位置,是一個有以下值的枚舉:

ios::beg: 檔案開頭

ios::cur: 檔案當前位置

ios::end: 檔案結尾

這兩個函式一般用於二進制檔案,因為文本檔案會因為系統對字元的解釋而可能與預想的值不同。

例:

file1.seekg(1234,ios::cur);//把檔案的讀指針從當前位置向後移1234個位元組

file2.seekp(1234,ios::beg);//把檔案的寫指針從檔案開頭向後移1234個位元組

如果vc編程的話最好使用CFile類等更加方便於檔案操作</CA>

相關詞條

相關搜尋

熱門詞條

聯絡我們