gpt4 book ai didi

c# - 如何存储协议(protocol)/规范结构

转载 作者:行者123 更新时间:2023-11-30 20:47:49 28 4
gpt4 key购买 nike

实现 ISO Creator(主要作为智力练习)我需要存储 cd 数据结构值。

例如,来自规范的第 47 页 https://www.cs.cmu.edu/~varun/cs315p/iso9660.pdf , 为了以 ISO9660 格式存储目录,我需要存储有关各种字节字段的信息

enter image description here

还有其他的表,比如存储字段的Path Tables,字段总数有几百个。

所以我也可以

1 - 将这些存储在 .cs 文件中,本质上是“硬编码”

public byte length=1;
public byte ExtendedAttributeLength = 0;
//and so on

2- 我可以将这些作为常量存储在 .cs 文件中

3 - 我可以将这些存储在 XML 文件中

4- 我什至可以将这些存储在数据库表中

考虑到这些值不太可能改变,但并非不可能,我不确定应该以哪种方式存储这些值。

谢谢

最佳答案

我认为您可以将所有这些规范定义为具有显式布局的结构。这样您就可以为每个字段指定偏移量:

[StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)]
public struct DirectoryRecord
{
[FieldOffset(0)]
byte RecordLength;

[FieldOffset(1)]
byte ExtendedAttrRecordLength;

...
}

然后您可以将它们序列化为字节数组,并大概将它们保存为 ISO 镜像头的一部分或它们在其中的任何位置。


但是,如果您查看现有的 C# ISO9660 实现之一,例如 .NET DiscUtils on CodePlex你会发现他们做事的方式有点不同。

对于 DirectoryRecord,他们定义了一个类,其中包含 ReadFromWriteTo 方法,它负责从输入流中的适当偏移量读取数据。这是一种选择。最重要的是,它们还有一些其他组件读取文件并将读取委托(delegate)给子组件,例如这个组件。

所以,你可以像他们那样做。或者您可以像我之前提到的那样使用结构来实现,并让它们的行为仅像 POCO,而不是额外的读写逻辑。您必须在其他地方执行此操作。

关于c# - 如何存储协议(protocol)/规范结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469934/

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