当前位置:  开发笔记 > 编程语言 > 正文

从字节数组读取行(不将字节数组转换为字符串)

如何解决《从字节数组读取行(不将字节数组转换为字符串)》经验,为你挑选了2个好方法。



1> Binary Worri..:

就我个人而言

    把一个Int16放在字符串的开头,这样你就可以知道它们将会持续多长时间,并且

    使用IO.BinaryReader类进行读取,它将"读取",整数,字符串,字符等变为变量,例如BinReader.ReadInt16()将读取两个字节,返回它们表示的int16,并在其中移动两个字节流

希望这可以帮助.

PS小心使用ReadString方法,它假定字符串前面有自定义的7位整数,即它是由BinaryWriter类编写的.以下是来自CodeGuru的帖子

BinaryWriter类有两种写字符串的方法:重载的Write()方法和WriteString()方法.前者根据类正在使用的编码将字符串写为字节流.WriteString()方法也使用指定的编码,但它将字符串的字节流作为字符串实际长度的前缀.这些带前缀的字符串通过BinaryReader.ReadString()读回.

关于长度值的有趣之处在于,尽可能少的字节用于保存此大小,它被存储为称为7位编码整数的类型.如果长度适合7位,则使用单个字节,如果大于此,则设置第一个字节的高位,并通过将值移位7位来创建第二个字节.这将以连续的字节重复,直到有足够的字节来保存该值.此机制用于确保长度不会成为序列化字符串占用的大小的重要部分.BinaryWriter和BinaryReader具有读取和写入7位编码整数的方法,但它们受到保护,因此只有从这些类派生时才能使用它们.



2> Jon Skeet..:

我会选择长度为前缀的字符串.它会让你的生活变得更简单,这意味着你可以用换行符来表示字符串.虽然对你的代码有一些评论:

不要使用Stream.DataAvailable.仅仅因为现在没有可用的数据并不意味着你已经阅读了流的结尾.

除非你绝对确定你永远不会需要超过ASCII的文本,否则不要使用ASCIIEncoding.

不要以为Stream.Read会读取您要求它的所有数据.始终检查返回值.

BinaryReader使这很容易很多(包括长度前缀的字符串和读取循环,直到它读取你要求的内容)

你在相同的数据上调用BitConverter.ToUInt16两次.为什么?

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有