|
dev
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Compression namespace for ArrayI would like to use Compression namespace for Array, i.e. use .NET native Compression for compress a String, or an Array of Integer whose elements are returned values of AscW for each char of the String. I tried with the code available @ http://msdn2.microsoft.com/en-us/library/system.io.compression.gzipstream(VS.80).aspx but with no success 'cause I obtained ms.lenght > buffer.length. This is my source code for CompressData: Private Sub CompressData() Dim BUFFERSIZE As Integer = DataArray.Length * Marshal.SizeOf(DataArray(0)) Dim buffer(BUFFERSIZE - 1) As Byte 'Dump integer Array DataArray in Byte Array buffer Dim IndexValue As Integer = 0 For Index As Integer = 0 To BUFFERSIZE - 1 If ((Index << 31) = 0) Then ' if Even buffer(Index) = (DataArray(IndexValue) >> 8) Else buffer(Index) = (DataArray(IndexValue) And &HFF) IndexValue += 1 End If Next Dim ms As New MemoryStream() ' Use the newly created memory stream for the compressed data. Dim compressedzipStream As New GZipStream(ms, CompressionMode.Compress, True) compressedzipStream.Write(buffer, 0, buffer.Length) ' Close the stream. compressedzipStream.Close() Dim BufferOut() As Byte = ms.ToArray() End Sub I've got the same problem also for DecompressData with the added difficulty of using chunk of Bytes, as reported in the previous MDSN article. What I'm doing wrong? Is there any work-around, any trick to use Compression not only for stream file but also for Array of Objects? Do you have any suggestion? Are there any commercial libraries, with no redistribuition license, doing this? Thanks Why not just encode the string so that you get an array of bytes?
Fla wrote: Show quoteHide quote > Hi! > I would like to use Compression namespace for Array, i.e. use .NET > native Compression for compress a String, or an Array of Integer whose > elements are returned values of AscW for each char of the String. > I tried with the code available @ > http://msdn2.microsoft.com/en-us/library/system.io.compression.gzipstream(VS.80).aspx > but with no success 'cause I obtained ms.lenght > buffer.length. > > This is my source code for CompressData: > > Private Sub CompressData() > Dim BUFFERSIZE As Integer = DataArray.Length * > Marshal.SizeOf(DataArray(0)) > Dim buffer(BUFFERSIZE - 1) As Byte > > 'Dump integer Array DataArray in Byte Array buffer > Dim IndexValue As Integer = 0 > For Index As Integer = 0 To BUFFERSIZE - 1 > If ((Index << 31) = 0) Then ' if Even > buffer(Index) = (DataArray(IndexValue) >> 8) > Else > buffer(Index) = (DataArray(IndexValue) And &HFF) > IndexValue += 1 > End If > > Next > > Dim ms As New MemoryStream() > ' Use the newly created memory stream for the compressed data. > Dim compressedzipStream As New GZipStream(ms, > CompressionMode.Compress, True) > compressedzipStream.Write(buffer, 0, buffer.Length) > ' Close the stream. > compressedzipStream.Close() > Dim BufferOut() As Byte = ms.ToArray() > > End Sub > > I've got the same problem also for DecompressData with the added > difficulty of using chunk of Bytes, as reported in the previous MDSN > article. > > What I'm doing wrong? Is there any work-around, any trick to use > Compression not only for stream file but also for Array of Objects? Do > you have any suggestion? > Are there any commercial libraries, with no redistribuition license, > doing this? > > Thanks > Hi!
Did you mean System.Text.Encoding.ASCII.GetBytes as the following code lines? Dim Buffer() As Byte = System.Text.Encoding.ASCII.GetBytes(StringChar) with For Index As Integer = 0 To 299 StringChar &= ChrW(Index + 255) Next Thanks Göran Andersson ha scritto: Show quoteHide quote > Why not just encode the string so that you get an array of bytes? > > > Fla wrote: > > Hi! [...] > > Yes. Except that you would need to use a dirrerent encoding to handle
characters that is not in the ASCII character set, like UTF8. Fla wrote: Show quoteHide quote > Hi! > Did you mean System.Text.Encoding.ASCII.GetBytes as the following code > lines? > > > Dim Buffer() As Byte = System.Text.Encoding.ASCII.GetBytes(StringChar) > > with > > For Index As Integer = 0 To 299 > StringChar &= ChrW(Index + 255) > Next > > Thanks > > Göran Andersson ha scritto: > >> Why not just encode the string so that you get an array of bytes? >> >> >> Fla wrote: >>> Hi! > [...] > Göran Andersson ha scritto:
> Yes. Except that you would need to use a dirrerent encoding to handle I can compress and decompress Array of bytes but I can't do this if I> characters that is not in the ASCII character set, like UTF8. dump the interrmediate compress byte() in a string. I'm using encoding.unicode.getstring to dump the intermediate compress byte() on a string and I'm using encoding.unicode.getbytes to get the array of bytes to be uncompressed. I can't get the result 'cause Deflate.Read(..) returns zero; I noticed that when I try to dump the compressed byte array on a string, I get less char as I forecast: CompressedBuffer.length = 119 while CompressedString.Length = 57 using Dim CompressedString As String = Encoding.Unicode.GetString(CompressedBuffer). I expected CompressedString.Length = CeilingUpper(119/2) = 60. I'm using unicode compression in order to get a String with Char in Unicode coding 'cause I need 2 bytes per char and storing a number 0 to 65535 in each char. Then I dump the this Unicode coded string on a field of a db. Any ideas? How could I dump the compressed array of bytes on an intermediate string? Show quoteHide quote > > Fla wrote: > > Hi! > > Did you mean System.Text.Encoding.ASCII.GetBytes as the following code > > lines? > > > > > > Dim Buffer() As Byte = System.Text.Encoding.ASCII.GetBytes(StringChar) > > > > with > > > > For Index As Integer = 0 To 299 > > StringChar &= ChrW(Index + 255) > > Next > > > > Thanks > > > > Göran Andersson ha scritto: > > > >> Why not just encode the string so that you get an array of bytes? > >> > >> > >> Fla wrote: > >>> Hi! > > [...] > > Have you checked out System.String.Intern? I saved about 30% using this in
a geocoder with millions of street names. No compression required.. If you have some binary data in an array, you can't just treat it as if
it was an encoded string, because then you will lose some data when it's decoded. If you want a string representation of binary data, you can use the Convert.ToBase64String and Convert.FromBase64String methods to convert to and from a base 64 string. Fla wrote: Show quoteHide quote > Göran Andersson ha scritto: > >> Yes. Except that you would need to use a dirrerent encoding to handle >> characters that is not in the ASCII character set, like UTF8. > > I can compress and decompress Array of bytes but I can't do this if I > dump the interrmediate compress byte() in a string. I'm using > encoding.unicode.getstring to dump the intermediate compress byte() on > a string and I'm using encoding.unicode.getbytes to get the array of > bytes to be uncompressed. > I can't get the result 'cause Deflate.Read(..) returns zero; I noticed > that when I try to dump the compressed byte array on a string, I get > less char as I forecast: CompressedBuffer.length = 119 while > CompressedString.Length = 57 using > Dim CompressedString As String = > Encoding.Unicode.GetString(CompressedBuffer). > I expected CompressedString.Length = CeilingUpper(119/2) = 60. > I'm using unicode compression in order to get a String with Char in > Unicode coding 'cause I need 2 bytes per char and storing a number 0 to > 65535 in each char. Then I dump the this Unicode coded string on a > field of a db. > > Any ideas? How could I dump the compressed array of bytes on an > intermediate string? > >> Fla wrote: >>> Hi! >>> Did you mean System.Text.Encoding.ASCII.GetBytes as the following code >>> lines? >>> >>> >>> Dim Buffer() As Byte = System.Text.Encoding.ASCII.GetBytes(StringChar) >>> >>> with >>> >>> For Index As Integer = 0 To 299 >>> StringChar &= ChrW(Index + 255) >>> Next >>> >>> Thanks >>> >>> Göran Andersson ha scritto: >>> >>>> Why not just encode the string so that you get an array of bytes? >>>> >>>> >>>> Fla wrote: >>>>> Hi! >>> [...] >>> >
Other interesting topics
.NET 3.0 and XP?
Downgrading .Net 2 application to .Net 1.1 how about Express environment for .NET 3.0? CSharp compiler error CS2000 CLR behavior about accessing data during garbage collection working Regular Expression Bug? Application.ProductVersion gives NullReferenceException Secure file transfer How to send HTTPS-Post request using C# application?? IFormatter custom implementation |
|||||||||||||||||||||||