Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Encoding.GetMaxByteCount-Methode

Berechnet beim Überschreiben in einer abgeleiteten Klasse die maximale Anzahl der Bytes, die beim Codieren der angegebenen Anzahl von Zeichen erzeugt wird.

Namespace:  System.Text
Assembly:  mscorlib (in mscorlib.dll)
public abstract int GetMaxByteCount(
	int charCount
)

Parameter

charCount
Typ: System.Int32
Die Anzahl der zu codierenden Zeichen.

Rückgabewert

Typ: System.Int32
Die maximale Anzahl an Bytes, die beim Codieren der angegebenen Anzahl von Zeichen erzeugt wird.
AusnahmeBedingung
ArgumentOutOfRangeException

charCount ist kleiner als 0 (null).

EncoderFallbackException

Es ist ein Fallback aufgetreten (eine ausführliche Erklärung finden Sie unter Zeichencodierung in .NET Framework).

- und -

EncoderFallback ist auf EncoderExceptionFallback festgelegt.

Der charCount-Parameter legt die Anzahl der Char-Objekte fest, die die zu codierenden Unicode-Zeichen darstellen, da .NET Framework für die Darstellung von Unicode-Zeichen intern UFT-16 verwendet. Aus diesem Grund können die meisten Unicode-Zeichen durch ein Char-Objekt dargestellt werden. Ein Unicode-Zeichen, das von einem Ersatzzeichenpaar dargestellt wird, benötigt jedoch z. B. zwei Char-Objekte.

Die Anwendung muss GetByteCount zum Berechnen der genauen Arraygröße verwenden, die von GetBytes zum Speichern der resultierenden Bytes benötigt wird. Zum Berechnen der maximalen Arraygröße muss GetMaxByteCount verwendet werden. Die GetByteCount-Methode ermöglicht es Ihnen, weniger Speicher zu belegen, wohingegen die GetMaxByteCount-Methode in der Regel schneller ausgeführt wird.

GetMaxByteCount ruft eine Zahl für den ungünstigsten Fall ab, auch für den ungünstigsten Fall für den zurzeit ausgewählten EncoderFallback. Wenn ein Fallback mit einer potenziell langen Zeichenfolge ausgewählt wird, ruft GetMaxByteCount große Werte ab, insbesondere, wenn im ungünstigsten Fall der Codierung die Modi für jedes Zeichen gewechselt werden. Dies kann zum Beispiel bei ISO-2022-JP der Fall sein. Weitere Informationen finden Sie im Blogeintrag "What's with Encoding.GetMaxByteCount() and Encoding.GetMaxCharCount()?" (http://blogs.msdn.com/shawnste/archive/2005/03/02/383903.aspx).

In den meisten Fällen ruft diese Methode geeignete Werte für kleine Zeichenfolgen ab. Bei großen Zeichenfolgen müssen Sie möglicherweise entscheiden, ob sehr große Puffer verwendet werden sollen oder aber im seltenen Fall, dass ein angemessenerer Puffer zu klein ist, Fehler abgefangen werden sollen. Zudem sollten Sie einen weiteren Ansatz mit GetByteCount oder Encoder.Convert erwägen.

Bei Verwendung von GetMaxByteCount muss die Anwendung den Ausgabepuffer anhand der maximalen Größe des Eingabepuffers zuordnen. Wenn die Größe des Ausgabepuffers beschränkt ist, verwendet die Anwendung möglicherweise die Convert-Methode.

GetMaxByteCount berücksichtigt potenziell übrig gebliebene Surrogate aus vorhergehenden Decodierungsvorgängen. Der Decoder führt dazu, dass beim Übergeben des Werts 1 an die Methode bei einer Einzelbyte-Codierung, z. B. ASCII, 2 abgerufen wird. Die Anwendung sollte die IsSingleByte-Eigenschaft verwenden, wenn diese Informationen erforderlich sind.

HinweisHinweis

GetMaxByteCount(N) ist nicht unbedingt der gleiche Wert wie N* GetMaxByteCount(1).

Hinweise zur Implementierung

Bei sämtlichen Implementierungen von Encoding muss sichergestellt werden, dass keine Ausnahmen durch Pufferüberlauf ausgelöst werden, wenn die Puffergröße den Berechnungsergebnissen dieser Methode entspricht.

Im folgenden Beispiel wird die Anzahl der zum Codieren eines Zeichenarrays erforderlichen Bytes bestimmt. Die Zeichen werden codiert, und die Ergebnisbytes werden angezeigt.


using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // The characters to encode:
      //    Latin Small Letter Z (U+007A)
      //    Latin Small Letter A (U+0061)
      //    Combining Breve (U+0306)
      //    Latin Small Letter AE With Acute (U+01FD)
      //    Greek Small Letter Beta (U+03B2)
      //    a high-surrogate value (U+D8FF)
      //    a low-surrogate value (U+DCFF)
      char[] myChars = new char[] { 'z', 'a', '\u0306', '\u01FD', '\u03B2', '\uD8FF', '\uDCFF' };

      // Get different encodings.
      Encoding  u7    = Encoding.UTF7;
      Encoding  u8    = Encoding.UTF8;
      Encoding  u16LE = Encoding.Unicode;
      Encoding  u16BE = Encoding.BigEndianUnicode;
      Encoding  u32   = Encoding.UTF32;

      // Encode the entire array, and print out the counts and the resulting bytes.
      PrintCountsAndBytes( myChars, u7 );
      PrintCountsAndBytes( myChars, u8 );
      PrintCountsAndBytes( myChars, u16LE );
      PrintCountsAndBytes( myChars, u16BE );
      PrintCountsAndBytes( myChars, u32 );

   }


   public static void PrintCountsAndBytes( char[] chars, Encoding enc )  {

      // Display the name of the encoding used.
      Console.Write( "{0,-30} :", enc.ToString() );

      // Display the exact byte count.
      int iBC  = enc.GetByteCount( chars );
      Console.Write( " {0,-3}", iBC );

      // Display the maximum byte count.
      int iMBC = enc.GetMaxByteCount( chars.Length );
      Console.Write( " {0,-3} :", iMBC );

      // Encode the array of chars.
      byte[] bytes = enc.GetBytes( chars );

      // Display all the encoded bytes.
      PrintHexBytes( bytes );

   }


   public static void PrintHexBytes( byte[] bytes )  {

      if (( bytes == null ) || ( bytes.Length == 0 ))
         Console.WriteLine( "<none>" );
      else  {
         for ( int i = 0; i < bytes.Length; i++ )
            Console.Write( "{0:X2} ", bytes[i] );
         Console.WriteLine();
      }

   }

}


/* 
This code produces the following output.

System.Text.UTF7Encoding       : 18  23  :7A 61 2B 41 77 59 42 2F 51 4F 79 32 50 2F 63 2F 77 2D
System.Text.UTF8Encoding       : 12  24  :7A 61 CC 86 C7 BD CE B2 F1 8F B3 BF
System.Text.UnicodeEncoding    : 14  16  :7A 00 61 00 06 03 FD 01 B2 03 FF D8 FF DC
System.Text.UnicodeEncoding    : 14  16  :00 7A 00 61 03 06 01 FD 03 B2 D8 FF DC FF
System.Text.UTF32Encoding      : 24  32  :7A 00 00 00 61 00 00 00 06 03 00 00 FD 01 00 00 B2 03 00 00 FF FC 04 00

*/



.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

.NET für Windows Store-Apps

Unterstützt in: Windows 8

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
© 2013 Microsoft. Alle Rechte vorbehalten.