vb.net 文件流在解码字节后获得空格

vb.net Filestream getting spaces after decoding bytes

我不确定发生了什么。我认为我根本没有更改代码,但出于某种原因,在使用 FileStream 对象读取文件的字节后,返回的字符之间出现空格:

'Turn off Raise Events until after change is checked
        fsw.EnableRaisingEvents = False

        'read from current seek position to end of file
        Dim bytesRead(_maxBytes) As Byte


        Dim fs As New FileStream(_filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)

        If (fs.Length > _maxBytes) Then
            previousSeekPosition = fs.Length - _maxBytes
        End If

        previousSeekPosition = fs.Seek(previousSeekPosition, SeekOrigin.Begin)

        Dim numBytes = fs.Read(bytesRead, 0, _maxBytes)

        fs.Close()

        previousSeekPosition += numBytes

        Dim sb As New StringBuilder()
        For i = 0 To numBytes - 1
            sb.Append(bytesRead(i))
        Next

        'Raise the event to show data
        If Not blnFirstRun Then
            RaiseEvent MoreData(Me, Encoding.ASCII.GetString(bytesRead, 0, _maxBytes), _filename, _fileDescription)
        Else
            blnFirstRun = False
        End If

        'Check the changes against the alerts
        AlertChange(Encoding.ASCII.GetString(bytesRead, 0, _maxBytes))

        'Turn Raise Events back on
        fsw.EnableRaisingEvents = True

我将 _maxBytes 设置为 16384。我基本上是在文件发生更改时从最后已知的读取位置读取文件(类似于 Linux Tail 所做的)。

我在一个文件上对其进行了测试,它似乎运行良好。但是,出于某种原因,它不想再工作了。我 不认为 我改变了任何东西 - 但它现在 returns 现在用空格改变了。

例如:

我有一个附加了“9999”的文件。当我 运行 Encoding.ASCII.GetString 例程时,它显示为:'9 9 9 9'。

我觉得我正在为一些可能非常简单的事情撞墙。希望有人快点知道答案。

将“9999”写入文件时得到“9 9 9 9”这一事实表明写入文件的任何内容都使用 UTF-16 编码,每个字符至少使用两个字节 (参考:Wikipedia: Comparison of Unicode encodings).

使用十六进制编辑器检查文件应该会显示是否确实如此。

请注意Encoding.Unicode Property中的备注,以防出现问题。