在流式传输时从Web请求中使用StreamReader流.NET?

时间:2011-11-12 00:22:38

标签: c# .net vb.net twitter streamreader

我正在尝试使用Twitter流式传输API,我正在尝试为用户打开一个流,以便在事件发生时使用它们。我正在使用一组标准的类来对twitter进行REST api调用。在“GET”调用中使用https://userstream.twitter.com/2/user.json时,响应流永远不会结束......我正在打开StreamReader并像对待Twitter的任何其他REST调用一样阅读响应。这对其他人来说可能是显而易见的,但是我如何“消费”这个流......有没有办法在读取时读取StreamReader(意思是在它关闭之前)?或者可能有一种不同的方法,我可以用来使用这个流....再次,我道歉,如果这接缝是一些基本的,但我现在无法弄明白...提前感谢任何建议还是帮忙!!!

这是我开始对此进行故障排除的原始来源...这个方法是由我在LinkedIn上的论坛中找到的一组C#类编造的。在读取“responseData = responseReader.ReadToEnd()”的行中,该方法开始“喝”流...但是这样做就像一个无底杯......在关闭之前实时读取这个数据流(这是基本上直到我停止调试或终止进程)是我正在处理的问题。

Private Function WebResponseGet(ByVal webRequest As HttpWebRequest) As String
    Dim responseReader As StreamReader = Nothing
    Dim responseData As String = ""

    Try
        responseReader = New StreamReader(webRequest.GetResponse().GetResponseStream())
        responseData = responseReader.ReadToEnd()
    Catch
        Throw
    Finally
        webRequest.GetResponse().GetResponseStream().Close()
        responseReader.Close()
        responseReader = Nothing
    End Try

    Return responseData
End Function

更新&相关问题:

所以,我想出了以下方法来保持流打开,并将其写入文件(这不是最后的方法,我只是测试,开发这样做的最佳方式:)< / p>

Private Sub DrinkIt(ByVal webRequest As HttpWebRequest)

    Dim coder As Encoding = Encoding.UTF8

    Dim stream_reader As New StreamReader(webRequest.GetResponse().GetResponseStream(), coder, True, 1024)

    Do While 0 < 1

        Dim w As IO.StreamWriter

        w = File.AppendText(targetFile)

        Dim c(5) As Char

        stream_reader.Read(c, 0, c.Length)

        w.Write(c)

        w.Close()

        w.Dispose()

    Loop

    stream_reader.Close()

    stream_reader.DiscardBufferedData()

    stream_reader.Dispose()

End Sub

这会将打开的twitter流写入文件,每次我发推文,转发,删除,直接消息......等等......文件会随着附加到文本的JSON对象而增长。我使用Do While 0&lt; 1在这里测试,因为我只是想看它工作。我在MSDN StreamReader Constructor Description上看到New构造函数应该接受“leaveOpen”的布尔值,但是当我尝试将它添加到构造函数时,不允许这样的参数... 有没有人有一个很好的例子如何使用强制和无限循环来做这个或者只是比这更好的方法...我想简单地阅读每次从Twitter发送的新更新,并相应地解决它们?显然有一种方法,我对于消费这样的流而不关闭它的概念,我只是刚接触...(**顺便说一下,多亏了Evil博士的建议,我在这个方向上处于领先地位......这不完全是他所建议的,但是是什么引领我来到这里)

2 个答案:

答案 0 :(得分:2)

使用StreamReader的缓冲区将收到的字节提供给(Encoding.UTF8.GetString),然后将它们附加到StringBuilder,以便将字符串作为字符串接收。

使用ToString

StringBuilder

答案 1 :(得分:1)

提前注意:您看到的leaveOpen参数仅出现在.NET 4.5及更高版本中

关于如何处理Twitter流媒体API:

以上链接将引导您使用.NET / C#开源库以及如何访问Twitter API( 流API和REST API)。