Encoding.GetMaxCharCount(Int32) Methode

Definitie

Wanneer deze wordt overschreven in een afgeleide klasse, berekent u het maximum aantal tekens dat wordt geproduceerd door het opgegeven aantal bytes te decoderen.

public:
 abstract int GetMaxCharCount(int byteCount);
public abstract int GetMaxCharCount(int byteCount);
abstract member GetMaxCharCount : int -> int
Public MustOverride Function GetMaxCharCount (byteCount As Integer) As Integer

Parameters

byteCount
Int32

Het aantal bytes dat moet worden gedecodeerd.

Retouren

Het maximum aantal tekens dat wordt geproduceerd door het opgegeven aantal bytes te decoderen.

Uitzonderingen

byteCount is kleiner dan nul.

Er is een terugval opgetreden (zie Character Encoding in .NET)

en

DecoderFallback is ingesteld op DecoderExceptionFallback.

Voorbeelden

In het volgende voorbeeld wordt een tekenreeks gecodeerd in een matrix van bytes en worden de bytes vervolgens gedecodeerd in een matrix met tekens.

using System;
using System.Text;

public class SamplesEncoding  {

   public static void Main()  {

      // Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Encoding u32LE = Encoding.GetEncoding( "utf-32" );
      Encoding u32BE = Encoding.GetEncoding( "utf-32BE" );

      // Use a string containing the following characters:
      //    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)
      String myStr = "za\u0306\u01FD\u03B2";

      // Encode the string using the big-endian byte order.
      byte[] barrBE = new byte[u32BE.GetByteCount( myStr )];
      u32BE.GetBytes( myStr, 0, myStr.Length, barrBE, 0 );

      // Encode the string using the little-endian byte order.
      byte[] barrLE = new byte[u32LE.GetByteCount( myStr )];
      u32LE.GetBytes( myStr, 0, myStr.Length, barrLE, 0 );

      // Get the char counts, and decode the byte arrays.
      Console.Write( "BE array with BE encoding : " );
      PrintCountsAndChars( barrBE, u32BE );
      Console.Write( "LE array with LE encoding : " );
      PrintCountsAndChars( barrLE, u32LE );
   }

   public static void PrintCountsAndChars( byte[] bytes, Encoding enc )  {

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

      // Display the exact character count.
      int iCC  = enc.GetCharCount( bytes );
      Console.Write( " {0,-3}", iCC );

      // Display the maximum character count.
      int iMCC = enc.GetMaxCharCount( bytes.Length );
      Console.Write( " {0,-3} :", iMCC );

      // Decode the bytes and display the characters.
      char[] chars = enc.GetChars( bytes );
      Console.WriteLine( chars );
   }
}


/* 
This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.

BE array with BE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ
LE array with LE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub Main()

      ' Create two instances of UTF32Encoding: one with little-endian byte order and one with big-endian byte order.
      Dim u32LE As Encoding = Encoding.GetEncoding("utf-32")
      Dim u32BE As Encoding = Encoding.GetEncoding("utf-32BE")

      ' Use a string containing the following characters:
      '    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)
      Dim myStr As String = "za" & ChrW(&H0306) & ChrW(&H01FD) & ChrW(&H03B2) 

      ' Encode the string using the big-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      Dim barrBE(u32BE.GetByteCount(myStr) - 1) As Byte
      u32BE.GetBytes(myStr, 0, myStr.Length, barrBE, 0)

      ' Encode the string using the little-endian byte order.
      ' NOTE: In VB.NET, arrays contain one extra element by default.
      '       The following line creates the array with the exact number of elements required.
      Dim barrLE(u32LE.GetByteCount(myStr) - 1) As Byte
      u32LE.GetBytes(myStr, 0, myStr.Length, barrLE, 0)

      ' Get the char counts, and decode the byte arrays.
      Console.Write("BE array with BE encoding : ")
      PrintCountsAndChars(barrBE, u32BE)
      Console.Write("LE array with LE encoding : ")
      PrintCountsAndChars(barrLE, u32LE)

   End Sub


   Public Shared Sub PrintCountsAndChars(bytes() As Byte, enc As Encoding)

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

      ' Display the exact character count.
      Dim iCC As Integer = enc.GetCharCount(bytes)
      Console.Write(" {0,-3}", iCC)

      ' Display the maximum character count.
      Dim iMCC As Integer = enc.GetMaxCharCount(bytes.Length)
      Console.Write(" {0,-3} :", iMCC)

      ' Decode the bytes and display the characters.
      Dim chars As Char() = enc.GetChars(bytes)
      Console.WriteLine(chars)

   End Sub

End Class


'This code produces the following output.  The question marks take the place of characters that cannot be displayed at the console.
'
'BE array with BE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ
'LE array with LE encoding : System.Text.UTF32Encoding : 5   12  :zăǽβ

Opmerkingen

Als u de exacte matrixgrootte wilt berekenen die is vereist voor GetChars het opslaan van de resulterende tekens, moet u de GetCharCount methode gebruiken. Als u de maximale matrixgrootte wilt berekenen, gebruikt u de GetMaxCharCount methode. Met de GetCharCount methode kan over het algemeen minder geheugen worden toegewezen, terwijl de GetMaxCharCount methode doorgaans sneller wordt uitgevoerd.

GetMaxCharCount haalt een slechtst getal op, inclusief het slechtste geval voor de geselecteerde DecoderFallback. Als een terugval wordt gekozen met een mogelijk grote tekenreeks, GetMaxCharCount haalt u grote waarden op.

In de meeste gevallen haalt deze methode redelijke getallen op voor kleine tekenreeksen. Voor grote tekenreeksen moet u mogelijk kiezen tussen het gebruik van zeer grote buffers en het vangen van fouten in het zeldzame geval dat een meer redelijke buffer te klein is. U kunt ook een andere benadering overwegen met behulp van GetCharCount of Decoder.Convert.

GetMaxCharCount heeft geen relatie tot GetBytes. Als u een vergelijkbare functie nodig hebt om mee GetByteste gebruiken, moet u gebruiken GetMaxByteCount.

Wanneer u deze GetMaxCharCountgebruikt, moet u de uitvoerbuffer toewijzen op basis van de maximale grootte van de invoerbuffer. Als de uitvoerbuffer in grootte is beperkt, kunt u de Decoder.Convert methode gebruiken.

Houd er rekening mee dat GetMaxCharCount het slechtste geval is voor resterend bytes van een vorige encoderbewerking. Voor de meeste codepagina's haalt het doorgeven van een waarde van 0 aan deze methode waarden op die groter zijn dan of gelijk zijn aan 1.

Note

GetMaxCharCount(N) is niet noodzakelijkerwijs dezelfde waarde als N* GetMaxCharCount(1).

Notities voor uitvoerders

Alle Encoding implementaties moeten garanderen dat er geen bufferoverloop-uitzonderingen optreden als buffers worden aangepast aan de resultaten van de berekeningen van deze methode.

Van toepassing op

Zie ook