none
如何较好地读取流式的有头有尾的AscII码格式的数据? RRS feed

  • 问题

  • 举个例子说明把。

    假设有一个生产者,它生产了如下AscII码格式的内容

    $ABC,13,XXX111,dsfsd,3534534,CC12CCC

    $ABC,45,CCCAAA,dsfsd,3534534,asdasdD12

    $ABC,35,CCadasd,dsfsd,3534534,asdas

    $ABC,34,436dfhgd,112asdbdf,3534534,2BA

    $ABC,23,cvbc,cvbcvb,fgdgddfg,asdsa

    每个数据的数据头是$ABC,数据尾是换行符,也就是\n

    生产者对象将生产者数据发送到另一个消费者对象上,消费者对象负责消费数据,会以String参数的方式进行接收,用一个带有String参数的事件接收,但是消费者接收数据的方式是流式接受,可能会出现接受数据不完整的情况。

    比如下列假设

    生产者发送

    $ABC,13,XXX111,dsfsd,3534534,CC12CCC

    $ABC,45,CCCAAA,dsfsd,3534534,asdasdD12

    消费者,第一次会接收如下

    $ABC,13,XXX111,dsfsd,3534534,CC12CCC

    $ABC,45,CCCAAA,dsfsd,

    第二次会接收到如下

    3534534,asdasdD12

    消费者每次接收,都可能数据不完整的情况。有较好的读取思路以及相关解决的读取的代码参考?

    如果消费者读取的时候,是以byte数组形式接收的话,有较好地读取思路以及相关解决的读取的代码参考?







    • 已编辑 Trian555 2021年2月5日 11:24
    2021年2月5日 11:05

全部回复

  • 你好,

    如果你想要传输完整的数据,我建议你可以使用Json序列化,这样就避免了使用流去传输数据。

    具体代码如下:

                var list = File.ReadAllLines("E:\\1.txt").ToList();
                var json = JsonConvert.SerializeObject(list);    //序列化
                var jsonToList = JsonConvert.DeserializeObject<List<string>>(json); //反序列化
                foreach (var item in jsonToList)
                {
                    Console.WriteLine(item);
                }
                Console.ReadKey();

    得到的结果是一个完整的list string,这样就不会出现数据丢失的情况。

    如果你坚持想用byte数据进行数据传输,你也可以看看下面的链接,是使用BJson去序列化数据的。、

    Serialize Newtonsoft JSON to byte array

    希望对你有所帮助。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2021年2月8日 6:13
    版主
  • 你好,

    如果你想要传输完整的数据,我建议你可以使用Json序列化,这样就避免了使用流去传输数据。

    具体代码如下:

                var list = File.ReadAllLines("E:\\1.txt").ToList();
                var json = JsonConvert.SerializeObject(list);    //序列化
                var jsonToList = JsonConvert.DeserializeObject<List<string>>(json); //反序列化
                foreach (var item in jsonToList)
                {
                    Console.WriteLine(item);
                }
                Console.ReadKey();

    得到的结果是一个完整的list string,这样就不会出现数据丢失的情况。

    如果你坚持想用byte数据进行数据传输,你也可以看看下面的链接,是使用BJson去序列化数据的。、

    Serialize Newtonsoft JSON to byte array

    希望对你有所帮助。

    Best Regards,

    Jack


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    谢谢提供,原本数据过来的时候就是byte[],字符串格式约定上是AscII码,不过现在我自己编写分隔符解码器解决了
    • 已编辑 Trian555 2021年2月8日 9:32
    2021年2月8日 9:32