Vraag : Hoe te om een koord in een korte vertegenwoordiging die in ASP.NET gebruiken C# of VB.NET samen te persen?

Wij hebben een behoefte om een koord in een vertegenwoordiging samen te persen die korter is dan het originele koord toen om het te decompresseren.  Ik wilde weten of is er een manier om dit te doen in .NET voor koorden die ongeveer 200-500 karakters zijn (niet uiterst lang, maar wij moeten hen voor gebruik in een URL/querystring samenpersen).

Antwoord : Hoe te om een koord in een korte vertegenwoordiging die in ASP.NET gebruiken C# of VB.NET samen te persen?

Omdat deze compressiemethodes in binaire gegevens resulteren, en u geen bytes in een URL kunt overgaan, moet het samengeperste gegeven als koord worden gecodeerd Base64. Terwijl de compressie de grootte van het koord zou kunnen verminderen, verdenk ik coderen Base64 waarschijnlijk zal u krijgen een koord groter dan u om in de eerste plaats probeerde samen te persen - in het bijzonder als uw koord grotendeels willekeurig is.

De kleine gegevensreeksen, b.v. een 500 bytekoord, neigen niet goed samen te persen en vaak in een verhoging van grootte te resulteren.

Wat bevat is in uw koord?

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
het gebruiken van Systeem;
het gebruiken van System.Collections.Generic;
het gebruiken van System.Linq;
het gebruiken van System.Text;
het gebruiken van System.IO;
het gebruiken van System.IO.Compression;

namespace ConsoleApplication1
{
	klassen Programma
	{
		statische nietige Leiding (koord [] args)
		{
			koord die = GetLongString longString (500);
			
			samengeperst koord = StringCompressor.CompressString (het longString);
			niet samengedrukt koord = (samengeperste) StringCompressor.DecompressString;

			Console.WriteLine („Originele koordlengte: {0} \ r \ nCompressed koordlengte: {1}“,
				samengeperst longString.Length. Lengte);
			Console.ReadKey ();
		}

		statisch koord GetLongString (int. len)
		{
			De streptokok van StringBuilder = nieuwe StringBuilder ();
			Willekeurige rand = nieuwe Willekeurig (DateTime.Now.Millisecond);

			voor (int. i = 0; i < len=""> streamBytes = nieuwe Lijst ();

			als (stream.CanSeek)
				stroom. Positie = 0;

			int. bytesRead = 0;
			
			{
				bytesRead = stroom. Lees (buffer, 0, buffer_size);
				als (bytesRead > 0)
					streamBytes.AddRange (buffer. Neem (bytesRead));
			} terwijl (bytesRead > 0);

			keer streamBytes.ToArray () terug;
		}
	}
}
Andere oplossingen  
 
programming4us programming4us