我正在为一个我几乎一无所知的系统编写一个 xml 解析器。我正在寻找为 xml 流设置本地副本,直到我可以查看提供流的系统,以便我可以同时编写测试等。
简要地向我展示了通过 http 访问 xml 流。这是无穷无尽的数据流,如果直接在网络浏览器中访问,它最终会崩溃,因为操作系统将耗尽内存。
现在,我正在尝试使用假数据设置本地流服务器,但我不知道如何通过 http 使这样的流变得可访问。开始是否正确?
public static Stream Create()
{
var xmlDemo1 = TestResources.Strings.XmlResponseDataDemo(TestResources.Strings.XmlResponseDataDemoResource1);
var demoDataLengthBytes = BitConverter.GetBytes(xmlDemo1.Length);
var demoDataBytes = Encoding.UTF8.GetBytes(xmlDemo1);
Func<byte[]> getBytes = () =>
{
var ret1 = new byte[demoDataLengthBytes.Length + demoDataBytes.Length];
Buffer.BlockCopy(demoDataLengthBytes, 0, ret1, 0, demoDataLengthBytes.Length);
Buffer.BlockCopy(demoDataBytes, 0, ret1, demoDataLengthBytes.Length, demoDataBytes.Length);
return ret1;
};
var ret = new MemoryStream();
Task.Factory.StartNew(() =>
{
while (true)
{
var buffer = getBytes();
ret.Write(buffer, 0, buffer.Length);
}
});
return ret;
}
我在发送的字节前面加上长度,这可能根本没有必要,但直到以后我才能弄清楚那个。