У меня есть два потока памяти, каждый из которых содержит сериализованные структуры.
Возможно ли объединить эти два потока в один файл таким образом, который впоследствии может быть прочитан и извлечен обратно в исходные два потока памяти?
EDIT: я должен указать, что причина, по которой мои данные разделены на два потока, - это то, что объекты, которые они содержат, должны быть десериализованы в разное время. Благодарю!
EDIT 2: К сожалению, я использую.Net 2.0. Я не могу воспользоваться Stream.CopyTo :(
Я уверен, что многие задействованные методы будут предложены. Я не поклонник сложных форматов сериализации.
Если производительность не является большой проблемой, рассмотрите просто сериализацию двух байтовых массивов. Как это:
class MyFileContents {
public byte[] Part0;
public byte[] Part1;
}
new BinaryFormatter().Serialize(myStream, new MyFileContents(...));
Быстро реализовать. Немного может пойти не так.
Также рассмотрите буферы протокола.
Здесь я написал вам небольшой фрагмент кода:
public void CombineStreams(Stream src1, Stream src2, Stream dstStream)
{
using (var writer = new BinaryWriter(dstStream))
{
writer.Write((int) src1.Length);
src1.CopyTo(dstStream);
writer.Write((int) src2.Length);
src2.CopyTo(dstStream);
}
}
public void ReadCombinedStreams(Stream srcStream, out Stream outStream1, out Stream outStream2)
{
outStream1 = ReadInnerStream(srcStream);
outStream2 = ReadInnerStream(srcStream);
}
private Stream ReadInnerStream(Stream stream)
{
int length;
byte[] content;
using (var reader = new BinaryReader(stream))
{
length = reader.ReadInt32();
content = reader.ReadBytes(length);
}
var result = new MemoryStream(length);
result.Write(content, 0, length);
result.Seek(0, SeekOrigin.Begin);
return result;
}