实现 ISO Creator(主要作为智力练习)我需要存储 cd 数据结构值。
例如,来自规范的第 47 页 https://www.cs.cmu.edu/~varun/cs315p/iso9660.pdf , 为了以 ISO9660 格式存储目录,我需要存储有关各种字节字段的信息
还有其他的表,比如存储字段的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
,他们定义了一个类,其中包含 ReadFrom
和 WriteTo
方法,它负责从输入流中的适当偏移量读取数据。这是一种选择。最重要的是,它们还有一些其他组件读取文件并将读取委托(delegate)给子组件,例如这个组件。
所以,你可以像他们那样做。或者您可以像我之前提到的那样使用结构来实现,并让它们的行为仅像 POCO,而不是额外的读写逻辑。您必须在其他地方执行此操作。
关于c# - 如何存储协议(protocol)/规范结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469934/