我正在测试将chuncked数据写入文件。而且我遇到了某种“麻烦”我有一个包含在Arraylist / List中的一个chuncked byte []列表。但只有List-version似乎有效。 arraylist使用未知的编解码器生成一个文件(在本例中为wmv)(可能是由于数据损坏)。
没有抛出任何异常,我似乎无法找到问题的根源。有人可以帮助我吗?
两个列表都从同一个流中接收数据:
int chunkSize = 1024;
byte[] chunk = new byte[chunkSize];
using (FileStream fileReader = new FileStream(@"C:\XXXX\someMovie.wmv", FileMode.Open, FileAccess.Read) )
{
BinaryReader binaryReader = new BinaryReader(fileReader);
int bytesToRead = (int)fileReader.Length;
do
{
chunk = binaryReader.ReadBytes(chunkSize);
byteList.Add(chunk);
bytesToRead -= chunk.Length;
} while (bytesToRead > 0);
}
工作列表版本(byteList = List<byte[]>)
:
using (System.IO.FileStream _FileStream = new System.IO.FileStream(@"C:\XXXX\listTest.wmv", System.IO.FileMode.Create, System.IO.FileAccess.Write))
{
for (int i = 0; i < byteList.Count; i++)
{
_FileStream.Write(byteList[i], 0, byteList[i].Count());
}
}
无法工作 Arraylist-Version (byteList = Arraylist)
:
using (System.IO.FileStream _FileStream = new System.IO.FileStream(@"C:\SIDJRGD\Zone afbakenen_2.wmv", System.IO.FileMode.Create, System.IO.FileAccess.Write))
{
for (int i = 0; i < byteList.Count; i++)
{
_FileStream.Write(ObjectToByteArray(byteList[i]), 0, ObjectToByteArray(byteList[i]).Length);
}
}
功能:ObjectToByteArray()(用于将Object
投射到byte[]
)
private static byte[] ObjectToByteArray(Object obj)
{
if (obj == null)
return null;
BinaryFormatter bf = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
bf.Serialize(ms, obj);
return ms.ToArray();
}
注意:我知道我可以使用List-solution
和forget about the arraylist
。但我只是好奇我可能做错了什么......
答案 0 :(得分:1)
问题是您使用Serialize
方法将Object
转换为byte[]
。 serialize方法对于序列化任何东西都很有用,而不仅仅是字节数组。因此,它使用额外的元数据打包数据以允许解码(您可以反序列化该数据,并且知道将其反序列化为字节数组)。
这些额外的数据显然不在原始字节数据中,因此这会破坏文件。
您可以将Object
直接转换为字节数组。但是,List<T>
通常首选Arraylist
,因此我只使用List<byte[]>
。