diff options
author | Jon Skeet <skeet@pobox.com> | 2009-01-27 14:47:35 +0000 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2009-01-27 14:47:35 +0000 |
commit | 6a60ac33d0e90f25f7e9ac84917dd92b2e11619d (patch) | |
tree | 6f5fbaaeb7f652856a3a5135671aafb743c8b97a /src/ProtocolBuffers/CodedInputStream.cs | |
parent | 49fcd4f794bb96c3dcf729f81c0ffcb19fdadc14 (diff) | |
download | protobuf-6a60ac33d0e90f25f7e9ac84917dd92b2e11619d.tar.gz protobuf-6a60ac33d0e90f25f7e9ac84917dd92b2e11619d.tar.bz2 protobuf-6a60ac33d0e90f25f7e9ac84917dd92b2e11619d.zip |
String optimisations
Diffstat (limited to 'src/ProtocolBuffers/CodedInputStream.cs')
-rw-r--r-- | src/ProtocolBuffers/CodedInputStream.cs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/ProtocolBuffers/CodedInputStream.cs b/src/ProtocolBuffers/CodedInputStream.cs index b7fe9c33..78d92519 100644 --- a/src/ProtocolBuffers/CodedInputStream.cs +++ b/src/ProtocolBuffers/CodedInputStream.cs @@ -219,16 +219,19 @@ namespace Google.ProtocolBuffers { /// </summary> public String ReadString() { int size = (int) ReadRawVarint32(); - if (size < bufferSize - bufferPos && size > 0) { + // No need to read any data for an empty string. + if (size == 0) { + return ""; + } + if (size <= bufferSize - bufferPos) { // 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); bufferPos += size; return result; - } else { - // Slow path: Build a byte array first then copy it. - return Encoding.UTF8.GetString(ReadRawBytes(size)); } + // Slow path: Build a byte array first then copy it. + return Encoding.UTF8.GetString(ReadRawBytes(size)); } /// <summary> |