如何存储协议/规范结构

时间:2014-08-24 08:33:54

标签: c# .net

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

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

enter image description here

还有其他表,例如存储字段的路径表,字段总数将为数百个。

所以我可以

1 - 将这些存储在.cs文件中,'硬编码'基本上

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

2-我可以将它们存储为.cs文件中的常量

3 -I可以将它们存储在XML文件中

4-我甚至可以将它们存储在数据库表中

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

谢谢

1 个答案:

答案 0 :(得分: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方法定义了一个类,它负责从输入流中的适当偏移量中进行读取。这是一种选择。最重要的是,他们有一些其他组件来读取文件并将读取委托给子组件,例如这个组件。

所以,你可以像他们一样做。或者你可以像我之前提到的那样使用结构,并使它们只像POCO一样,而不是额外的读写逻辑。你必须在其他地方这样做。