- 深入解析ASP核心技術
- 王洪影
- 476字
- 2019-01-03 18:16:03
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對象是二進制數據也是可以的,而反過來則不行。