C# 使用web请求中的StreamReader stream.NET作为流?
我正在试验Twitter流媒体api,并试图为用户打开一个流,以便在事件发生时使用它们。我正在使用一组标准类来对twitter进行RESTAPI调用。在“GET”调用中使用时,响应流永远不会结束。。。我正在打开一个StreamReader并阅读响应,就像我在其他任何REST呼叫Twitter时一样。这对其他人来说可能是显而易见的,但我如何“消费”这个流。。。是否有一种方法可以在StreamReader阅读时阅读它(意思是在它关闭之前)?或者可能有一种不同的方法可以让我的用户使用这个流。。。。再一次,如果这对某些人来说是基本的,我道歉,但我现在无法理解。。。提前感谢您的建议或帮助 这是我开始解决这个问题的原始来源。。。这个方法是根据我在LinkedIn论坛上找到的一组C#类制作的。在“responseData=responseReader.ReadToEnd()”行中,该方法开始“饮用”流。。。但这就像一个无底的杯子。。。我要解决的问题是在数据流关闭之前实时读取数据流(基本上直到我停止调试或终止进程)C# 使用web请求中的StreamReader stream.NET作为流?,c#,.net,vb.net,twitter,streamreader,C#,.net,Vb.net,Twitter,Streamreader,我正在试验Twitter流媒体api,并试图为用户打开一个流,以便在事件发生时使用它们。我正在使用一组标准类来对twitter进行RESTAPI调用。在“GET”调用中使用时,响应流永远不会结束。。。我正在打开一个StreamReader并阅读响应,就像我在其他任何REST呼叫Twitter时一样。这对其他人来说可能是显而易见的,但我如何“消费”这个流。。。是否有一种方法可以在StreamReader阅读时阅读它(意思是在它关闭之前)?或者可能有一种不同的方法可以让我的用户使用这个流。。。。再一
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
更新和相关问题:
因此,我想出了以下方法来保持流的开放性,并将其写入文件(这不是最终的方法,我只是在测试,这是一种开发实现这一点的最佳方法:)
Private Sub-DrinkIt(ByVal-webRequest作为HttpWebRequest)
作为编码的Dim编码器=Encoding.UTF8
Dim stream_reader作为新的StreamReader(webRequest.GetResponse().GetResponseStream(),编码器,True,1024)
当0<1时执行此操作
与IO.StreamWriter一样暗显w
w=File.AppendText(targetFile)
Dim c(5)作为字符
流_读取器读取(c,0,c.Length)
w、 写入(c)
w、 关闭()
w、 处置
环
stream_reader.Close()
stream_reader.DiscardBufferedData()
stream_reader.Dispose()
端接头
这会将打开的推特流写入一个文件,每次我推特、转发、删除、直接发送消息时。。。等等该文件随着文本中附加的JSON对象而增长。我在这里使用Do While 0<1进行测试,因为我只想看到它工作。我看到新的构造函数应该接受“leveOpen”的布尔值,但是当我尝试将它添加到构造函数中时,不允许有这样的参数有没有人有一个很好的例子来说明如何通过强制和无限循环来实现这一点,或者有一个比这更好的方法。。。我只想简单地阅读每次从Twitter发送的新更新,并相应地对其进行处理?显然有一种方法,我只是对这样一个不关闭的流消费概念不太熟悉。。(**顺便说一句,多亏了邪恶博士的建议,我被引导到了这个方向上……这并不完全是他所建议的,而是引导我来到这里的原因)使用
StreamReader
的缓冲区将接收到的字节馈送到(Encoding.UTF8.GetString
)然后将它们附加到StringBuilder
以字符串的形式接收到流
使用StringBuilder的ToString
一句话:您看到的leaveOpen
参数仅出现在.NET 4.5及更高版本中
关于如何处理Twitter流媒体API:
通过以上链接,您可以访问关于如何使用.NET/C#访问Twitter API(流式API和REST API)的开源库和文档。请显示一些源代码。。。你试过什么?什么是目标/什么不起作用?Yahia,我已经更新了?与我的原始来源和描述的目标。。。基本上是阅读此流,并基于此流执行其他代码块。请查看我回答中的链接-您将找到关于如何处理Twitter流API的源代码和解释…确保在处理流时(任何一次性对象都是真实的)总是在他们周围使用这样一句话:@Mataniko-极好的观察力。我同意。你好,邪恶博士。。。我正在测试这一点,并将发布一个编辑这个问题与我的代码根据您的建议在适当的时候。谢谢你的洞察力,先生,谢谢你!这太完美了。好的一点,关于“LeaveOpen”参数,我使用的是4.0。。。我查看了VS2011开发版本,它就在那里。还有,很酷的一点是我已经创建了自己的REST TweetDotNet类库,它在mint中运行。。。我只需要为此创建一个特定的流类,并继承核心OAuth方法。。将消息添加到队列是非常棒的,我不知道为什么我没有想到这一点。。。上面的链接专门回答了这个问题,其他链接有助于从头开始调整解决方案。
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