vb.net - 从 StreamReader VB.Net 读取两行

标签 vb.net newline streamreader memorystream

我在从流读取器读取两行时遇到问题。我想阅读第一行,然后继续阅读下一行。这是我的代码:

Public Function Read()
    Dim a As New MemoryStream(ASCII.GetBytes("[ID] " & vbCrLf & " salut" & vbCrLf))

    Debug.Print(client.ReadLine(a))
    Debug.Print(client.ReadLine(a))
End Function    


Public Function ReadLine(ByVal Data As MemoryStream)
    Dim sr As New StreamReader(Data)
    Return sr.ReadLine
End Function

输出为:

[ID]

一行。我在 Debug模式中检查了流,发现第一次 ReadLine 调用后该位置为 15。所以我必须将“指针”移动到第一个 VbCrLf 之后(一直到最后)。但我认为这不是正确的做法。我哪里错了?我什至按值传递了流,所以它应该可以工作。

     编辑
我做了一些检查,似乎只有在通过流时,位置才会移动到末尾。我在同一个 Read 函数中创建了一个流读取器,并将内存流作为参数传递。有效。我不知道为什么会发生这种情况。我仍在寻找答案。

最佳答案

目前尚不清楚您真正想要做什么,但您并不是真的尝试从 [a] StreamReader 读取两行,而是尝试读取一行> 使用相同的数据源/缓冲区从两个不同的流读取器一次读取一行。

Dim buff = Encoding.ASCII.GetBytes("[ID] " & vbCrLf & " salut" & vbCrLf)

Using ms As New MemoryStream(buff)
    Using sr As New StreamReader(ms)
        Console.WriteLine(sr.ReadLine())
        Console.WriteLine("memstream poition: " & ms.Position)
        Console.WriteLine(sr.ReadLine())
        Console.WriteLine("memstream poition: " & ms.Position)
        Console.WriteLine(sr.ReadLine())
    End Using
End Using

如果您在第一个 sr.ReadLine() 上设置断点,您将看到 MemoryStream 位置已更改。如果将鼠标悬停在 sr 变量上,您就会明白原因:

enter image description here

Streamreader 有一个缓冲区,默认为 1024 字节。您可以将该缓冲区与代码中创建的缓冲区进行比较,发现它们是相同的。还有一个 StreamReader 重载,允许您指定大小:

Public Sub New(stream As System.IO.Stream, 
                encoding As System.Text.Encoding,
                detectEncodingFromByteOrderMarks As Boolean, 
                bufferSize As Integer)

尝试使用不同的(新)StreamReaders 读取单个数据流是行不通的,因为前一个数据流已经消耗了一些数据。您应该能够将数千行读入数组或列表中,您的代码可以将其用作行缓冲区。

关于vb.net - 从 StreamReader VB.Net 读取两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367929/

相关文章:

c# - 使用 StreamReader 逐行读取文件时 "cannot convert from ' 字符串 ' to ' System.IO.Stream '"

c# - 带有泛型的工厂模式在 C# 中有效,但在 vb.net 中不起作用,为什么?

git - 尽管出现 "No newline at end of file"警告,如何在 git gui 中逐行暂存

c# - 存储数据的文本文件

database - 在数据库和 Json 中保存新行

c# - Resharper 在返回前停止换行

c# - 在 C# 中读取包含大量行的文本文件

c# - asp.net 中的文件 uploader 不显示文件

sql - 查询表达式中shortssize = S中字符串的语法错误

vb.net - 在同一屏幕中打开 winforms