我有一个库(用 C# 编写),我需要将我的对象的表示以特定的二进制格式读/写到磁盘(或任何流)(以确保与 C/Java 库实现的兼容性)。该格式需要大量的位打包和一些 DEFLATE 字节流。但是,我希望我的库尽可能地使用惯用的 .NET,因此希望提供一个尽可能接近正常二进制序列化过程的 API。我知道实现 IFormatter 接口的能力,但是由于我真的无法重用内置序列化堆栈的任何部分,是否值得这样做,或者它只会带来不必要的开销。换句话说:
实施 IFormatter 和合作。
或者
只提供作用于流的“序列化”/“反序列化”方法?
下面提出了一个很好的观点,即在涉及远程处理的任何情况下都需要序列化语义。在使用 MarshalByRef 对象可行的情况下,我很确定这不会成为问题,所以撇开这一点不谈,使用 ISerializable/IFormatter 与自定义堆栈相比有什么好处或坏处(或者,我的理解是远程错误)?