Aracılığıyla paylaş


Encoding.GetMaxByteCount(Int32) Yöntem

Tanım

Türetilmiş bir sınıfta geçersiz kılındığında, belirtilen karakter sayısını kodlayarak üretilen en fazla bayt sayısını hesaplar.

public:
 abstract int GetMaxByteCount(int charCount);
public abstract int GetMaxByteCount(int charCount);
abstract member GetMaxByteCount : int -> int
Public MustOverride Function GetMaxByteCount (charCount As Integer) As Integer

Parametreler

charCount
Int32

Kodlanacak karakter sayısı.

Döndürülenler

Belirtilen karakter sayısını kodlayarak üretilen bayt sayısı üst sınırı.

Özel durumlar

charCount, sıfırdan küçüktür.

Geri dönüş oluştu (daha fazla bilgi için bkz. .NET'te Karakter Kodlama)

-ve-

EncoderFallback olarak ayarlanır EncoderExceptionFallback.

Örnekler

Aşağıdaki örnek, bir karakter dizisini kodlamak için gereken bayt sayısını belirler, karakterleri kodlar ve sonuçta elde edilen baytları görüntüler.

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

*/
Imports System.Text

Public Class SamplesEncoding   

   Public Shared Sub 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)
      Dim myChars() As Char = {"z"c, "a"c, ChrW(&H0306), ChrW(&H01FD), ChrW(&H03B2), ChrW(&HD8FF), ChrW(&HDCFF)}
 

      ' Get different encodings.
      Dim u7 As Encoding = Encoding.UTF7
      Dim u8 As Encoding = Encoding.UTF8
      Dim u16LE As Encoding = Encoding.Unicode
      Dim u16BE As Encoding = Encoding.BigEndianUnicode
      Dim u32 As Encoding = 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)

   End Sub


   Public Shared Sub PrintCountsAndBytes(chars() As Char, enc As Encoding)

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

      ' Display the exact byte count.
      Dim iBC As Integer = enc.GetByteCount(chars)
      Console.Write(" {0,-3}", iBC)

      ' Display the maximum byte count.
      Dim iMBC As Integer = enc.GetMaxByteCount(chars.Length)
      Console.Write(" {0,-3} :", iMBC)

      ' Encode the array of chars.
      Dim bytes As Byte() = enc.GetBytes(chars)

      ' Display all the encoded bytes.
      PrintHexBytes(bytes)

   End Sub


   Public Shared Sub PrintHexBytes(bytes() As Byte)

      If bytes Is Nothing OrElse bytes.Length = 0 Then
         Console.WriteLine("<none>")
      Else
         Dim i As Integer
         For i = 0 To bytes.Length - 1
            Console.Write("{0:X2} ", bytes(i))
         Next i
         Console.WriteLine()
      End If

   End Sub

End Class


'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

Açıklamalar

charCount.NET, Unicode karakterlerini temsil etmek için UTF-16'yı dahili olarak kullandığından, parametre aslında kodlanan Unicode karakterlerini temsil eden nesne sayısını Char belirtir. Sonuç olarak, çoğu Unicode karakteri bir Char nesneyle temsil edilebilir, ancak bir vekil çifti tarafından temsil edilen bir Unicode karakteri, örneğin iki Char nesne gerektirir.

tarafından elde edilen baytları depolamak için gereken GetBytes dizi boyutunu tam olarak hesaplamak için yöntemini kullanmanız GetByteCount gerekir. En büyük dizi boyutunu hesaplamak için yöntemini kullanın GetMaxByteCount . GetByteCount yöntemi genellikle daha az bellek ayırmaya izin verirken, GetMaxByteCount yöntem genellikle daha hızlı yürütülür.

GetMaxByteCount seçili durumdaki EncoderFallbackiçin en kötü durum dahil olmak üzere en kötü durum numarasını alır. Büyük olabilecek bir dizeyle geri dönüş seçilirse, GetMaxByteCount özellikle kodlamanın en kötü durumunun her karakter için mod değiştirmeyi içerdiği durumlarda büyük değerler alır. Örneğin, iso-2022-JP için bu durum oluşabilir. Daha fazla bilgi için "Encoding.GetMaxByteCount() ve Encoding.GetMaxCharCount() ile ilgili blog gönderisine bakın.

Çoğu durumda, bu yöntem küçük dizeler için makul değerleri alır. Büyük dizeler için çok büyük arabellekler kullanma ve daha makul bir arabellek çok küçük olduğunda nadir durumlarda hataları yakalama arasında seçim yapmanız gerekebilir. veya Encoder.Convertkullanarak GetByteCount farklı bir yaklaşımı da göz önünde bulundurmak isteyebilirsiniz.

kullanırken GetMaxByteCount, giriş arabelleğinin en büyük boyutuna göre çıkış arabelleği ayırmanız gerekir. Çıkış arabelleğinin boyutu kısıtlanmışsa yöntemini kullanabilirsiniz Convert .

Önceki bir kod çözücü işleminden GetMaxByteCount gelen olası kalan yedekleri göz önünde bulundurduğunu unutmayın. Kod çözücü nedeniyle yöntemine 1 değeri geçirilerek ASCII gibi tek baytlı kodlama için 2 alınır. Bu bilgi gerekiyorsa özelliğini kullanmanız IsSingleByte gerekir.

Uyarı

GetMaxByteCount(N) ile aynı değer N* GetMaxByteCount(1)olmayabilir.

Uygulayanlara Notlar

Arabellekler bu yöntemin hesaplamalarının sonuçlarına göre boyutlandırılırsa tüm Encoding uygulamalar arabellek taşması özel durumlarının oluşmadığını garanti etmelidir.

Şunlara uygulanır

Ayrıca bkz.