ASP中如何快速将字节流转换为字符流?

madpolice 2002-12-18 09:03:05
目前使用的方法

' 二进制转字符串
function bytes2bstr(vin)
strreturn = ""
for i = 1 to lenb(vin)
thischarcode = ascb(midb(vin,i,1))
if thischarcode < &h80 then
strreturn = strreturn & chr(thischarcode)
else
nextcharcode = ascb(midb(vin,i+1,1))
strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
i = i + 1
end if
next
bytes2bstr = strreturn
end function




存在的问题:速度太慢!!

请问如何解决?

刚才测试了一下。
同样长度的文本
1.执行“字节流到字符流转换”操作,执行时间是17秒
2.执行“MD5加密”操作,执行时间是3秒
...全文
195 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaOk 2002-12-22
  • 打赏
  • 举报
回复
'--------------------------------------------------------------------
' 二进制转字符串
'
' 入口参数:字节流
' 函数返回:字符串
' Code By:Madpolice 2002-12-21
' 利用 ADODB.Stream 对象,速度比原来的字符替换法快了n倍,n≈30!!)
'--------------------------------------------------------------------
'下面的常量是函数用到的,因为我在函数外面已经定义过了,因此不在这里重复定义
'---- StreamTypeEnum Values ----
'Const adTypeBinary = 1
'Const adTypeText = 2

Function Bytes2bStr(vin)
Dim BytesStream,StringReturn

Set BytesStream = Server.CreateObject("ADODB.Stream") '建立一个流对象
With BytesStream
.Type = adTypeText '设置流对象的类型为字符流
.Open '打开流对象
.WriteText vin '把vin写入流对象中

.Position = 0 '设置流对象的起始位置是0,也就是开头
'这个操作必须做,为什么我也不知道,失败了n次得出的结论
'如果不进行这个操作,下面设置Charset属性就出错
.Charset = "GB2312" '设置流对象的编码方式为GB2312
.Position = 2 '设置流对象的起始位置是2(过滤掉开始的一个控制字符
'这个控制字符是WriteText方法按默认属性Charset="Unicode"
'读入数据的时候自动加到数据开头的,字符的值是FF3F
'这个控制字符占2字节,所以Position设置为2
'表示略过2个字节,下面的ReadText方法从Position开始读数据
StringReturn = .ReadText '把流对象的内容保存在StringReturn变量中
.close '关闭流对象
End With
Set BytesStream = Nothing '销毁流对象

Bytes2bStr = StringReturn

End Function
'--------------------------------------------------------------------

=========================
欢迎使用 CSDN 论坛助手 ..... [助您多、快、好、爽地上csdn...]
Http://www.ChinaOK.net/csdn/
madpolice 2002-12-20
  • 打赏
  • 举报
回复
修正一下

TempFile = Server.MapPath("tempNews.asp")

换成

TempFile = Server.MapPath("/tempNews.asp")
madpolice 2002-12-20
  • 打赏
  • 举报
回复
这个函数可以配合下面的函数使用.下面的函数返回字节流

'--------------------------------------------------------------------
' 获取远程HTML
' 入口参数:url 例如:"http://www.csdn.net/"
' 函数返回:字节流
'--------------------------------------------------------------------
Function GetURL(url)
Dim Retrieval
Set Retrieval = Server.CreateObject("Msxml2.ServerXMLHTTP")
With Retrieval
.Open "GET", url, False
.Send
GetURL = .responsebody
if len(.responsebody)<100 then
response.write "获取远程文件 <a href="&url&" target=_blank>"&url&"</a> 失败。"
response.end
end if

End With
Set Retrieval = Nothing
End Function
'--------------------------------------------------------------------
madpolice 2002-12-20
  • 打赏
  • 举报
回复
自己回答自己问题不行吗?

我的分呢?
逍遥小贼 2002-12-20
  • 打赏
  • 举报
回复
呵呵,楼主可以呀,收藏之,有空试试:)
madpolice 2002-12-20
  • 打赏
  • 举报
回复
问题解决了.

'--------------------------------------------------------------------
' 二进制转字符串
'
' 入口参数:字节流
' 函数返回:字符串
' Code By:Madpolice 2002-12-20
' 利用 ADODB.Stream 对象,速度比原来的字符替换法快了n倍,n≈30!!)
' 函数使用了临时文件
' 是否可以不用临时文件直接操作流?我不知道,也不会,如果你会请告诉我
' MSDN把 adSaveCreateOverWrite 的值错写成 4 了,害我走弯路:(
'--------------------------------------------------------------------
'下面的常量是函数用到的,因为我在函数外面已经定义过了,因此不在这里重复定义
'---- StreamTypeEnum Values ----
'Const adTypeBinary = 1
'Const adTypeText = 2

'---- SaveOptionsEnum Values ----
'Const adSaveCreateNotExist = 1
'Const adSaveCreateOverWrite = 2

Function Bytes2bStr(vin)
Dim BytesStream,TempFile,StringReturn

TempFile = Server.MapPath("tempNews.asp") '定义一个临时文件

Set BytesStream = Server.CreateObject("ADODB.Stream") '建立一个流对象
With BytesStream
.Type = adTypeBinary '设置流对象的类型为字节流
.Open '打开流对象
.Write vin '把vin写入流对象中
.SaveToFile TempFile,adSaveCreateOverWrite '把流对象的内容写入临时文件,如文件存在就覆盖
.Close '关闭流对象

.Type = adTypeText '设置流对象的类型为字符流
.Charset = "GB2312" '设置流对象的编码方式为GB2312
.Open '打开流对象
.LoadFromFile TempFile '按指定的编码方式从刚才的临时文件中读取内容到流对象
StringReturn = .ReadText '把流对象的内容保存在StringReturn变量中
.close '关闭流对象
End With
Set BytesStream = Nothing '销毁流对象

Bytes2bStr = StringReturn

End Function
'--------------------------------------------------------------------
madpolice 2002-12-18
  • 打赏
  • 举报
回复
谁有这方面的经验,请介绍一下.

28,405

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧