ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
10220
10220
EMPFEHLEN
-
Hallo liebe Leute,
ich versuche momentan mit den Kompressions-Funktionen in System.IO.Compression einen String zu komprimieren. DeflateStream und GzipStream verarbeiten aber beide nur Streams, d.h. es wäre aus den mir vorliegenden Beispielen nur möglich, wenn ich eine Datei auf der Festplatte anlege und diese dann wieder auslese - was ich jedoch vermeiden möchte, es soll höchstens am Ende eine Datei ausgegeben werden.
Mit:kann man den Textinhalt eines StreamReader in einen String ziehen.Code :1
Dim sString as String = stream.ReadToEnd()
Gibt es aber eine Möglichkeit, genau das Gegenteil zu tun ?
Es gibt ja eine Stream-Klasse, zu der die Write-Methode gehört.
Mein Problem ist jetzt, aus dem String ein Array aus Byte zu erzeugen, und damit den Stream zu füttern.Code :1 2 3 4 5
Dim instance As Stream Dim buffer As Byte() Dim offset As Integer Dim count As Integer instance.Write(buffer, offset, count)
Sollte es eine andere Methode geben, die Kompression zu nutzen, wäre ich auch nicht abgeneigt. Vielleicht durch Verwendung der StreamWriter oder ~Reader ?
Danke schonmal.
MfG Calvin
-
12.08.06 21:27 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo!
Du könntest du Daten einfach in einen MemoryStream schreiben und anschließend mit dem resultierenden byte[] arbeiten.
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Hallo und Danke für die Idee,
aber es gibt weiterhin ein Problem:
Denn die Write-Methoden verlangen auch hier ein Array aus Bytes."aus dem String ein Array aus Byte zu erzeugen, und damit den Stream zu füttern"
Wie kann ich also meinen String in Bytes umwandeln? In ein Array aus Char ist ja kein Problem, aber dann weiter?Write - Überschrieben. Schreibt einen Byteblock mit den aus dem Puffer gelesenen Daten in den aktuellen Stream.
WriteByte - Überschrieben. Schreibt ein Byte an die aktuelle Position im aktuellen Stream.
Bisher hab ich dies:
aber das dauert halt seine Zeit. Ob es da noch was schnelleres gibt?Code :1
byteArray(I) = Microsoft.VisualBasic.AscW(charArray(I))
Außerdem, wenn man Text hat möchte ja auch die Codierung, also UTF7 , UTF8 etc. mit übernommen werden.
MfG Calvin
-
15.08.06 19:23 #4
- Registriert seit
- Feb 2005
- Ort
- Kirchdorf a. d. Krems, OÖ
- Beiträge
- 213
Wenn du einen Stream zur Verfügung hast, und du willst darauf Strings schreiben, kannst du das mittels eines StreamWriters machen:
Code csharp:1 2 3
Stream stream = ...; StreamWriter writer = new StreamWriter(stream, Encoding.UTF8); writer.WriteLine("Dieser String wird in den Stream geschrieben");
Der StreamWriter übernimmt praktisch für dich die Arbeit des umwandelns in ein byte[].
Wenn du es selber umwandeln willst, auch kein ProblemWie kann ich also meinen String in Bytes umwandeln? In ein Array aus Char ist ja kein Problem, aber dann weiter?
Dazu gibts die Klasse System.Text.Encoding
Code csharp:1 2 3 4 5 6 7
Stream stream; String myString = "Dieser String wird zuerst in ein byte[] umgewandelt und dann versendet"; //umwandeln Encoding encoding = Encoding.UTF8; //im UTF8 Zeichensatz versenden byte[] byteArray = encoding.GetBytes(myString); // versenden/auf Stream schreiben stream.Write(byteArray, 0, byteArray.Length);
Lg, Yanick
-
Sorry, dass ich erst jetzt antworte, aber ich war "etwas" beschäftigt.
Stimmt, passt - DANKE...Wenn du es selber umwandeln willst, auch kein Problem
Dazu gibts die Klasse System.Text.Encoding
Ich hab auch festgestellt, dass die Kompression ja ein Byte-Array möchte und es daher brauchte.
Hier komprimiere ich so, dass ein Byte-Array rauskommt:
Code :1 2 3 4 5 6 7
Dim ZielStream As New MemoryStream Dim CompressStream As New GZipStream(ZielStream, CompressionMode.Compress, True) CompressStream.Write(byteArray, 0, byteArray.Length) CompressStream.Flush() byteArray = ZielStream.ToArray CompressStream.Close() ZielStream.Close()
Wenn ich jenes dann an die Dekomprimierung übergebe kommt leider nicht vernünftiges bei raus. Am Ende ist sText ein leerer String und byteArray ist leer, also Länge 0.
Dekomprimierung:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Dim QuellStream As New MemoryStream QuellStream.Write(byteArray, 0, byteArray.Length) Dim DecompressStream As New GZipStream(QuellStream, CompressionMode.Decompress) Select Case nStatus Case 2 Dim Reader As New StreamReader(CType(DecompressStream, Stream)) sText = Reader.ReadToEnd Reader.Close() Case 3 Dim Reader As New BinaryReader(CType(DecompressStream, Stream)) byteArray = Reader.ReadBytes(QuellStream.Length) Reader.Close() End Select QuellStream.Close() DecompressStream.Close()
Nebenbei: Wenn ich selbiges für die Dekomprimierung eines aus einer Datei gelesenen (komprimierten) FileStream benutze klappt das richtig.
Woran könnnte das aber liegen? Gibt es solche Unterschiede zwischen File- und Memorystream oder hab ich "nur" einen Fehler irgendwo?
MfG Calvin
Ähnliche Themen
-
Datei ohne Stream öffnen
Von colblake im Forum .NET CaféAntworten: 3Letzter Beitrag: 24.08.10, 15:13 -
ZIP-Datei von Stream öffnen
Von the snake II im Forum PHPAntworten: 2Letzter Beitrag: 05.06.10, 13:00 -
Regex String in Datei suchen und Zeichen aus String ausgeben.
Von BillaBong im Forum PHPAntworten: 3Letzter Beitrag: 05.01.09, 15:25 -
Stream an String?
Von Smily0412 im Forum JavaAntworten: 6Letzter Beitrag: 30.10.07, 16:22 -
Web-Server Stream Ergebnisse als string
Von paschy im Forum JavaAntworten: 0Letzter Beitrag: 15.09.04, 01:46





Zitieren

Login





