Ver código fonte

Use our "local" copy of Encoding.UTF8 in CodedInputStream too.

Jon Skeet 10 anos atrás
pai
commit
a0f956932d

+ 2 - 2
csharp/src/ProtocolBuffers/CodedInputStream.cs

@@ -339,12 +339,12 @@ namespace Google.Protobuf
             {
                 // Fast path:  We already have the bytes in a contiguous buffer, so
                 //   just copy directly from it.
-                String result = Encoding.UTF8.GetString(buffer, bufferPos, size);
+                String result = CodedOutputStream.Utf8Encoding.GetString(buffer, bufferPos, size);
                 bufferPos += size;
                 return result;
             }
             // Slow path: Build a byte array first then copy it.
-            return Encoding.UTF8.GetString(ReadRawBytes(size), 0, size);
+            return CodedOutputStream.Utf8Encoding.GetString(ReadRawBytes(size), 0, size);
         }
 
         /// <summary>

+ 1 - 1
csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs

@@ -135,7 +135,7 @@ namespace Google.Protobuf
         /// </summary>
         public static int ComputeStringSize(String value)
         {
-            int byteArraySize = UTF8.GetByteCount(value);
+            int byteArraySize = Utf8Encoding.GetByteCount(value);
             return ComputeRawVarint32Size((uint) byteArraySize) +
                    byteArraySize;
         }

+ 5 - 4
csharp/src/ProtocolBuffers/CodedOutputStream.cs

@@ -59,7 +59,8 @@ namespace Google.Protobuf
     /// </remarks>
     public sealed partial class CodedOutputStream
     {
-        private static readonly Encoding UTF8 = Encoding.UTF8;
+        // "Local" copy of Encoding.UTF8, for efficiency. (Yes, it makes a difference.)
+        internal static readonly Encoding Utf8Encoding = Encoding.UTF8;
 
         /// <summary>
         /// The buffer size used by CreateInstance(Stream).
@@ -240,7 +241,7 @@ namespace Google.Protobuf
         {
             // Optimise the case where we have enough space to write
             // the string directly to the buffer, which should be common.
-            int length = UTF8.GetByteCount(value);
+            int length = Utf8Encoding.GetByteCount(value);
             WriteRawVarint32((uint)length);
             if (limit - position >= length)
             {
@@ -253,13 +254,13 @@ namespace Google.Protobuf
                 }
                 else
                 {
-                    UTF8.GetBytes(value, 0, value.Length, buffer, position);
+                    Utf8Encoding.GetBytes(value, 0, value.Length, buffer, position);
                 }
                 position += length;
             }
             else
             {
-                byte[] bytes = UTF8.GetBytes(value);
+                byte[] bytes = Utf8Encoding.GetBytes(value);
                 WriteRawBytes(bytes);
             }
         }