2.3.3 二进制数据

写入二进制数据使用Write方法(即Type属性为2时使用),就一个参数,就是要写入的数据。读取二进制数据使用Read方法,参数是读取的字节数,省略则从当前位置一直读到流的末尾。

Write方法的参数要求是真正的二进制数据,使用ChrB方法拼接的二进制字符串是不行的。下面的范例使用了Request.BinaryRead()方法,以二进制方式读取表单提交的内容,它返回的正是一个字节数组。

StreamBinaryData.asp

<%@codepage=936%>
<! --#include File="getMemoryFormat.asp" -->
<% Response.Charset="GBK" %>

<form method="post">
<input type="text" name="inputText" value="編碼">
<input type="submit" value="Go">
</form>

<%
If Request.TotalBytes > 0 Then
    Dim byteArray
    byteArray = Request.BinaryRead(Request.TotalBytes)
    response.write TypeName(byteArray) & "<br>"
    response.write VarType(byteArray) & "<br>"
    response.write "接收的数据:" & getMemoryFormat(byteArray) & "<br>"

    Dim stream
    Set stream = Server.CreateObject("ADODB.Stream")
    stream.Type = 1                          '二进制方式
    stream.Open
    stream.Write byteArray                   '写入二进制数据

    stream.Position = 0                      '移动指针到位置0
    response.write "流中的数据:" & getMemoryFormat(stream.Read) & "<br>"

    stream.Position = 0                      '移动指针到位置0
    stream.Type = 2                          '变更为文本方式
    stream.Charset="GBK"
    response.write stream.ReadText           '输出文本

    stream.close
    Set stream = nothing
End If %>

运行结果如图2-18所示。

图2-18 二进制数据处理范例

从运行结果可以看出,二进制数据是原样写入的,没有任何变化。

此例中,我们先写入二进制数据,然后变更为文本方式,按GBK编码读取文本,从而实现了二进制数据到文本的转换,这正是Stream对象的一大用途。