|
|
|
@ -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> |
|
|
|
|