stream(流媒體技術)

Stream泛指流媒體技術。流媒體實際指的是一種新的媒體傳送方式,而非一種新的媒體,是指採用流式傳輸的方式在Internet播放的媒體格式。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

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 )

//比如要把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 &get(char &ch);功能是從流中讀取一個字符,結果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示從文件中讀取一個字符,並把讀取的字符保存在x中。

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

還有一種形式的原型是:ifstream &get(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;

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類等更加方便於文件操作