2016-08-28 9 views
3

イメージをバイト配列にエンコードしてサーバーに送信しようとしています。 エンコーディングと送信パーツは問題ありませんが、私の問題はバイト配列が大きすぎて送信に時間がかかりすぎて圧縮が速くなると思ったためです。実際の問題は私がsystem.ioやストリームを使うことができないということです。私は.net 2.0をターゲットにしています。 ありがとうございます。ストリームまたはシステムなしでバイト配列を圧縮する方法

+0

は、なぜあなたはsystem.ioを使用するか、好奇心の外にストリームすることはできませんか?別のプラットフォームを使用していますか? – rolls

+1

私はwebglとwebglをコーディングしています.netライブラリのほとんどは使用できません – Henjin

答えて

17
using System.IO; 
using System.IO.Compression; 

コード:

使用7zipをライブラリを更新しました

public static byte[] Compress(byte[] data) 
{ 
    MemoryStream output = new MemoryStream(); 
    using (DeflateStream dstream = new DeflateStream(output, CompressionLevel.Optimal)) 
    { 
     dstream.Write(data, 0, data.Length); 
    } 
    return output.ToArray(); 
} 

public static byte[] Decompress(byte[] data) 
{ 
    MemoryStream input = new MemoryStream(data); 
    MemoryStream output = new MemoryStream(); 
    using (DeflateStream dstream = new DeflateStream(input, CompressionMode.Decompress)) 
    { 
     dstream.CopyTo(output); 
    } 
    return output.ToArray(); 
} 


http://www.splinter.com.au/compressing-using-the-7zip-lzma-algorithm-in/

// Convert the text into bytes 
byte[] DataBytes = ASCIIEncoding.ASCII.GetBytes(OriginalText); 

// Compress it 
byte[] Compressed = SevenZip.Compression.LZMA.SevenZipHelper.Compress(DataBytes); 

// Decompress it 
byte[] Decompressed = SevenZip.Compression.LZMA.SevenZipHelper.Decompress(Compressed); 
+3

おい...私はあなたに言った...私はsystem.ioを使用できませんまたはストリーム – Henjin

+1

@TheFallen私は更新しました私の答え。 – mjb

+13

ほんの少しの感謝、おそらく? @ mjbはあなたの人生のX分だけあなたを助けようとしました。あなたが質問に答えるとき、それを捕まえることは必ずしも容易ではありません。 –

0

圧縮

 public static byte[] Compress(byte[] inputData) 
      { 
       if (inputData == null) 
        throw new ArgumentNullException("inputData must be non-null"); 

       MemoryStream output = new MemoryStream(); 
       using (DeflateStream dstream = new DeflateStream(output, CompressionLevel.Optimal)) 
       { 
        dstream.Write(inputData, 0, inputData.Length); 
       } 
       return output.ToArray(); 
    } 

OR 



public static byte[] Compress(byte[] inputData) 
    { 
     if (inputData == null) 
      throw new ArgumentNullException("inputData must be non-null"); 

     using (var compressIntoMs = new MemoryStream()) 
     { 
      using (var gzs = new BufferedStream(new GZipStream(compressIntoMs, 
      CompressionMode.Compress), BUFFER_SIZE)) 
      { 
       gzs.Write(inputData, 0, inputData.Length); 
      } 
      return compressIntoMs.ToArray(); 
     } 
    } 

解凍

public static byte[] Decompress(byte[] inputData) 
      { 
       if (inputData == null) 
        throw new ArgumentNullException("inputData must be non-null"); 

       MemoryStream input = new MemoryStream(inputData); 
       MemoryStream output = new MemoryStream(); 
       using (DeflateStream dstream = new DeflateStream(input, CompressionMode.Decompress)) 
       { 
        dstream.CopyTo(output); 
       } 
       return output.ToArray(); 

       if (inputData == null) 
        throw new ArgumentNullException("inputData must be non-null"); 
      } 

OR 

    public static byte[] Decompress(byte[] inputData) 
      { 
       if (inputData == null) 
        throw new ArgumentNullException("inputData must be non-null"); 

       using (var compressedMs = new MemoryStream(inputData)) 
       { 
        using (var decompressedMs = new MemoryStream()) 
        { 
         using (var gzs = new BufferedStream(new GZipStream(compressedMs, CompressionMode.Decompress), BUFFER_SIZE)) 
         { 
          gzs.CopyTo(decompressedMs); 
         } 
         return decompressedMs.ToArray(); 
        } 
       } 
      } 
+0

opは、ライブラリを持たない別のプラットフォームで開発しているときにSystem.IO名前空間を使用できないと述べています。 – mjb

関連する問題