官术网_书友最值得收藏!

2.3.7 Stream對象間的數據復制

兩個Stream對象間是可以相互復制數據的,在源Stream對象上使用CopyTo方法即可,格式如下:

objStream.CopyTo 目標Stream,字符數/字節數

第二個參數是要復制的字符數或字節數,文本方式時指字符數,二進制方式時指字節數。如果省略,則復制的是從源Stream當前位置到末尾的所有數據。

StreamCopy.asp

<%@codepage=936%>
<%
Response.Charset="BIG5"

'復制源
Dim stream
Set stream = Server.CreateObject("ADODB.Stream")
stream.Type = 2             '文本方式
stream.Charset = "GBK"
stream.Open
stream.WriteText "編碼"
stream.Position = 0         '指針移回0位置,以便讀取文本

'復制目標
Dim streamTo
Set streamTo = Server.CreateObject("ADODB.Stream")
streamTo.Type = 2           '文本方式
streamTo.Charset = "BIG5"
streamTo.Open
streamTo.WriteText "A"

'復制一個字符,即“編”字
stream.copyTo streamTo,1

'輸出目標流中的文本
streamTo.position=0         '指針移回0位置
response.codepage=950
response.write streamTo.ReadText

streamTo.close
Set streamTo = nothing

stream.close
Set stream = nothing
%>

運行結果如圖2-25所示。

圖2-25 Stream對象間復制數據

使用CopyTo方法后,源Stream對象和目標Stream對象的指針的位置都會變化。此例中,只復制了一個字符,那么執行CopyTo方法后,源Stream對象的指針指向位置2,即Position=2,而目標Stream對象的指針指向位置3。

指針移動過程如圖2-26所示。

圖2-26 指針移動示意圖

如果你夠細心的話,會發現復制過去的數據是BD 73,而不是BE 8E,這是為什么呢?復制的過程,實際上就相當于從源Stream對象讀取指定的文本,然后再寫入目標Stream對象。讀取時,是Charset指定編碼到Unicode編碼的轉換,寫入時則反之。概括來說,文本方式時,CopyTo方法暗含編碼轉換的過程。

二進制方式時,數據是原樣復制的,不進行任何轉換。

執行數據復制的兩個Stream對象,原則上類型應該是一致的,要么都是文本數據,要么都是二進制數據。但實際上,源Stream對象是文本數據、目標Stream對象是二進制數據也是可以的,而反過來則不行。

主站蜘蛛池模板: 申扎县| 朝阳县| 溆浦县| 广灵县| 海盐县| 大洼县| 芜湖市| 咸宁市| 新郑市| 元谋县| 罗田县| 巫溪县| 福清市| 仙游县| 清流县| 于都县| 武乡县| 清河县| 兴安县| 平塘县| 隆安县| 谷城县| 皋兰县| 通州区| 墨竹工卡县| 岳池县| 九寨沟县| 白水县| 蒙城县| 娱乐| 崇阳县| 周宁县| 汾阳市| 府谷县| 西峡县| 名山县| 湘阴县| 古田县| 威宁| 海宁市| 铁力市|