diff options
Diffstat (limited to 'csharp/src')
-rw-r--r-- | csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs | 4 | ||||
-rw-r--r-- | csharp/src/ProtocolBuffers/CodedOutputStream.cs | 18 |
2 files changed, 17 insertions, 5 deletions
diff --git a/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs b/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs index 5457f79f..58475ff7 100644 --- a/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs +++ b/csharp/src/ProtocolBuffers/CodedOutputStream.ComputeSize.cs @@ -135,7 +135,7 @@ namespace Google.Protobuf /// </summary>
public static int ComputeStringSize(int fieldNumber, String value)
{
- int byteArraySize = Encoding.UTF8.GetByteCount(value);
+ int byteArraySize = UTF8.GetByteCount(value);
return ComputeTagSize(fieldNumber) +
ComputeRawVarint32Size((uint) byteArraySize) +
byteArraySize;
@@ -323,7 +323,7 @@ namespace Google.Protobuf /// </summary>
public static int ComputeStringSizeNoTag(String value)
{
- int byteArraySize = Encoding.UTF8.GetByteCount(value);
+ int byteArraySize = UTF8.GetByteCount(value);
return ComputeRawVarint32Size((uint) byteArraySize) +
byteArraySize;
}
diff --git a/csharp/src/ProtocolBuffers/CodedOutputStream.cs b/csharp/src/ProtocolBuffers/CodedOutputStream.cs index efc83d0e..c817a20b 100644 --- a/csharp/src/ProtocolBuffers/CodedOutputStream.cs +++ b/csharp/src/ProtocolBuffers/CodedOutputStream.cs @@ -58,6 +58,8 @@ namespace Google.Protobuf /// </remarks>
public sealed partial class CodedOutputStream : ICodedOutputStream
{
+ private static readonly Encoding UTF8 = Encoding.UTF8;
+
/// <summary>
/// The buffer size used by CreateInstance(Stream).
/// </summary>
@@ -294,16 +296,26 @@ namespace Google.Protobuf WriteTag(fieldNumber, WireFormat.WireType.LengthDelimited);
// Optimise the case where we have enough space to write
// the string directly to the buffer, which should be common.
- int length = Encoding.UTF8.GetByteCount(value);
+ int length = UTF8.GetByteCount(value);
WriteRawVarint32((uint) length);
if (limit - position >= length)
{
- Encoding.UTF8.GetBytes(value, 0, value.Length, buffer, position);
+ if (length == value.Length) // Must be all ASCII...
+ {
+ for (int i = 0; i < length; i++)
+ {
+ buffer[position + i] = (byte)value[i];
+ }
+ }
+ else
+ {
+ UTF8.GetBytes(value, 0, value.Length, buffer, position);
+ }
position += length;
}
else
{
- byte[] bytes = Encoding.UTF8.GetBytes(value);
+ byte[] bytes = UTF8.GetBytes(value);
WriteRawBytes(bytes);
}
}
|