簡體   English   中英

如何在C#中壓縮Object [] []

[英]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
}
  1. 將您的object[][]轉換為byte[]
  2. 壓縮byte[]

步驟1是最困難的部分,它將要求所有對象都可序列化,以便可以將它們轉換為byte[]

之所以棘手,是因為object[]的內容實際上只是對內存中各種object s的內存引用,而這些object s同樣可以引用其他object s。 有些甚至可以引用特定的系統資源,例如已分配給它們的I / O端口。 將這樣的對象發送到另一台計算機沒有任何意義,因為該計算機沒有為該對象提供相同的資源,對嗎? 因此,除非這些類特別指出可以對它們進行序列化和反序列化為字節流,否則您將無法對其進行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM