Saschas Weblog

ESCde Developer Blog

  Home :: Kontakt :: RSS Feed
  30 Posts :: 0 Artikel :: 10 Kommentare :: 32 Trackbacks

Archiv

Post Kategorien

ESCde

ESCde Blogger

Die MemoryStream-Klasse erstellt Streams, die im Arbeitsspeicher gesichert werden statt zum Beispiel im Dateisystem, wie das bei FileStreams der Fall ist. Eine Anwendung, die bisher viel mit temporären Dateien im Filesystem arbeitet, kann u. U. eine Menge Performance gewinnen, indem sie stattdessen MemoryStreams verwendet. Viele Komponenten, wie z. B. das RichTextBox-Steuerelement, akzeptieren nämlich in ihren Load() und Save() Methoden nicht nur einen Dateinamen, sondern wahlweise auch eine Stream-Instanz. Und hier kann statt einem FileStream auch ein MemoryStream übergeben werden. Das Beispiel hier zeigt die Verwendung eines MemoryStreams mit einem RichTextBox-Steuerelement.

1 string _rtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1031{" + 2 @"\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;" + 3 @"}}\viewkind4\uc1\pard\f0\fs17 Hallo Stream\par}"; 4 5 // *** RTF-Datei aus Speicher laden *** 6 // Stream-Objekt als MemoryStream-Objekt erstellen 7 // Byte-Array Darstellung von String im Konstruktor übergeben 8 Stream s = new MemoryStream(UTF8Encoding.Default.GetBytes(_rtf)); 9 //Stream an LoadFile() Methode übergeben 10 this.richTextBox1.LoadFile(s, RichTextBoxStreamType.RichText); 11 12 // *** RTF-Datei in Speicher sichern *** 13 s = new MemoryStream(); 14 // Stream an SaveFile() Methode übergeben 15 this.richTextBox1.SaveFile(s, RichTextBoxStreamType.RichText); 16 // Stream in MemoryStream casten, damit ToArray() Methode 17 // aufgerufen werden kann 18 MemoryStream m = (MemoryStream)s; 19 byte[] b = m.ToArray(); 20 // Byte-Array in String zurückkonvertieren 21 string t = UTF8Encoding.Default.GetString(b); 22 //ASCIIEncoding.Default.GetString 23 m.Dispose(); 24 s.Dispose();

Beim Umwandeln von/ in Byte-Arrays helfen die statischen Methoden der jeweiligen Encoder-Klasse. Um ein ASCII-codiertes Byte-Array zu erstellen, hätte in Zeile 8 die Methode ASCIIEncoding.Default.GetBytes() aufgerufen werden müssen.

veröffentlicht am 03.03.2007 14:31