【发布时间】:2016-04-16 03:12:11
【问题描述】:
我使用包含多个魔术字节序列的二进制格式。我想将它们作为不可变的静态成员保存在静态类中。
public static class HuffmanConsts
{
// output format: Header, serialized tree (prefix), DataDelimiter, coded data (logical blocks are 8 byte large, Little Endian)
public const string Extension = ".huff";
public static readonly IReadOnlyList<byte> Header = Array.AsReadOnly(new byte[] {0x7B, 0x68, 0x75, 0x7C, 0x6D, 0x7D, 0x66, 0x66}); // string {hu|m}ff
public static readonly IReadOnlyList<byte> DataDelimiter = Array.AsReadOnly(BitConverter.GetBytes(0L)); // eight binary zeroes, regardless of endianness
}
ReadOnlyCollection<byte>(从Array.AsReadOnly() 返回)防止外部代码更改值,这与byte[] 不同。
但是现在,我无法通过stream.Write() 输出Header,因为它需要byte[]:
stream.Write(HuffmanConsts.Header, 0, HuffmanConsts.Header.Count)
有没有一种优雅的方式来编写Header?还是我必须编写一个循环并将字节一个一个地输入到流中?
【问题讨论】:
-
在Stack Overflow、MSDN 上搜索并尝试了
stream.write readonlycollection byte之类的查询,但没有得到相关结果。 -
Stream需要byte[]。点。您需要牺牲一些 OOP 概念或性能。选择权在你。 -
我会封装序列化/反序列化本身。考虑一个具有 [静态] 方法的类 void WriteHeader(stream), WriteDelimiter(stream), ReadHeader(stream), ...
标签: c# filestream immutability binaryfiles readonly-collection