gpt4 book ai didi

c# - 在流式传输 Web 请求时使用 StreamReader 流 .NET?

转载 作者:行者123 更新时间:2023-11-30 12:15:10 26 4
gpt4 key购买 nike

我正在试验 Twitter 流媒体 API,并尝试为用户打开一个流以在事件发生时使用它们。我正在使用一组标准的类来对 Twitter 进行 REST api 调用。使用 https://userstream.twitter.com/2/user.json 时在“GET”调用中,响应流永远不会结束......我正在打开一个 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

更新和相关问题:

所以,我想出了以下方法来保持流打开并将其写入文件(这不是 final方法,我只是在测试,开发执行此操作的最佳方法:)

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

这会将打开的推特流写入一个文件,每次我发推、转推、删除、私信……等等……文件随着附加到文本的 JSON 对象而增长。我在这里使用 Do While 0 < 1 进行测试,因为我只是想看看它是否正常工作。我在 MSDN StreamReader Constructor Description 上看到New 构造函数应该接受“leaveOpen”的 bool 值,但是当我尝试将其添加到构造函数时不允许这样的参数......有没有人有一个很好的例子来说明如何通过强制和无限循环或比这更好的方法......我想简单地阅读每次从 Twitter 发送的新更新,并相应地解决它们?显然有一种方法,我只是新的概念在不关闭的情况下消耗这样的流..(**顺便说一句,感谢 Dr. Evil 的建议,我被引导往这个方向......这不完全是他的建议,但正是引导我来到这里的原因)

最佳答案

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

使用StringBuilderToString

关于c# - 在流式传输 Web 请求时使用 StreamReader 流 .NET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8101476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com