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