[英]How do I compress Object[][] in C#
我需要在C#中壓縮object [] []。 我可以使用Gzip comrepss-解壓縮byte [],但是在這種情況下該怎么做?
使用二進制序列化將其轉換為字節數組,然后將其壓縮。 如果數組中的所有對象都是可序列化的,則可以執行以下操作
object[][] objects = new[] {new[] {"a"}};
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream())
using (GZipStream gZipStream = new GZipStream(File.OpenWrite("C:\\zipped.zip"),
CompressionMode.Compress))
{
formatter.Serialize(gZipStream, objects);
}
//unzipping
using (GZipStream gZipStream = new GZipStream(File.OpenRead("C:\\zipped.zip"),
CompressionMode.Decompress))
{
objects = (object[][])formatter.Deserialize(gZipStream);
Console.WriteLine(objects[0][0]); //a
}
object[][]
轉換為byte[]
byte[]
步驟1是最困難的部分,它將要求所有對象都可序列化,以便可以將它們轉換為byte[]
。
之所以棘手,是因為object[]
的內容實際上只是對內存中各種object
s的內存引用,而這些object
s同樣可以引用其他object
s。 有些甚至可以引用特定的系統資源,例如已分配給它們的I / O端口。 將這樣的對象發送到另一台計算機沒有任何意義,因為該計算機沒有為該對象提供相同的資源,對嗎? 因此,除非這些類特別指出可以對它們進行序列化和反序列化為字節流,否則您將無法對其進行任何操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.