Foxtable(狐表)用户栏目专家坐堂 → [求助]关于二进制读取问题


  共有2184人关注过本帖树形打印复制链接

主题:[求助]关于二进制读取问题

帅哥哟,离线,有人找我吗?
jspta
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1731 积分:11255 威望:0 精华:0 注册:2011/12/15 22:06:00
[求助]关于二进制读取问题  发帖心情 Post By:2015/11/17 18:55:00 [只看该作者]

使用FileStream读取文件后,在用BinaryReader读取
文件流开头为 00 07 00 05 ……
使用BinaryReader.ReadUInt16 读取出来是 07 00 变成了 256 * 7 而我实际上只想得到 7(4个字节一组)。

另外在文件较大的时候,对二进制流进行循环,大约60M的数据,循环一次需要近11秒,这个显然太慢了,希望在1秒作用。
有没有办法快速查找到某字节或者分块循环。(我不知道需要的字节在哪里,而且因为整个流是连续不断,每个块的结束就是另一个快的开始,所以分割会不会出现错误?)

代码如下,不涉及其它代码
Dim dtm As Date = Date.now
Dim strFilePath As String = ""
Dim fs As New System.IO.FileStream(strFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
Dim br As New System.IO.BinaryReader(fs)
Dim nFS As Integer = fs.length
Dim n As Integer = 0
Do While n<fs.length
    If nfs -n >= 4 Then
        Dim nlength As Integer = br.readbyte * 256 + br.readbyte
        Dim nString As Integer = br.readbyte * 256 + br.readbyte
        Select Case nlength
            Case 0
                n = n + 4
            Case 1,2,3,4
                n = n + nlength 
            Case Else
                br.readbytes(nLength-4)
                n = n + nlength 
        End Select 
    Else
        n = fs.length
    End If
Loop
Output.Show((Date.now - dtm).Totalseconds)


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/17 19:23:00 [只看该作者]

呃,你想获取多少都可以的啊

 

Dim byteData(3) As Byte

Dim strFilePath As String = "d:\test.txt"

Dim fs As New System.IO.FileStream(strFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read)
fs.Read(byteData, 0, byteData.Length)

msgbox(byteData(0))
msgbox(byteData(1))
msgbox(byteData(2))
msgbox(byteData(3))


 回到顶部