You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2020/07/04 07:49:16 UTC

[httpcomponents-client] branch master updated: MultipartEntityBuilder#generateBoundary optimization (#233)

This is an automated email from the ASF dual-hosted git repository.

olegk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-client.git


The following commit(s) were added to refs/heads/master by this push:
     new ec82acc  MultipartEntityBuilder#generateBoundary optimization (#233)
ec82acc is described below

commit ec82acc8588edfbcebb90667cfc753bc7bf3e00c
Author: slisaasquatch <sl...@users.noreply.github.com>
AuthorDate: Sat Jul 4 00:49:07 2020 -0700

    MultipartEntityBuilder#generateBoundary optimization (#233)
---
 .../client5/http/entity/mime/MultipartEntityBuilder.java   | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartEntityBuilder.java b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartEntityBuilder.java
index 278aade..54135c1 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartEntityBuilder.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/entity/mime/MultipartEntityBuilder.java
@@ -29,12 +29,13 @@ package org.apache.hc.client5.http.entity.mime;
 
 import java.io.File;
 import java.io.InputStream;
+import java.nio.CharBuffer;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Random;
+import java.util.concurrent.ThreadLocalRandom;
 
 import org.apache.hc.core5.http.ContentType;
 import org.apache.hc.core5.http.HttpEntity;
@@ -173,12 +174,13 @@ public class MultipartEntityBuilder {
     }
 
     private String generateBoundary() {
-        final StringBuilder buffer = new StringBuilder();
-        final Random rand = new Random();
-        final int count = rand.nextInt(11) + 30; // a random size from 30 to 40
-        for (int i = 0; i < count; i++) {
-            buffer.append(MULTIPART_CHARS[rand.nextInt(MULTIPART_CHARS.length)]);
+        final ThreadLocalRandom rand = ThreadLocalRandom.current();
+        final int count = rand.nextInt(30, 41); // a random size from 30 to 40
+        final CharBuffer buffer = CharBuffer.allocate(count);
+        while (buffer.hasRemaining()) {
+            buffer.put(MULTIPART_CHARS[rand.nextInt(MULTIPART_CHARS.length)]);
         }
+        buffer.flip();
         return buffer.toString();
     }