Skip to content

Commit 1fca67b

Browse files
author
Stephane Landelle
committed
Pool StringBuilders, close #777
1 parent 8f26406 commit 1fca67b

35 files changed

+142
-68
lines changed

src/main/java/com/ning/http/client/FluentCaseInsensitiveStringsMap.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import static com.ning.http.util.MiscUtils.isNonEmpty;
2020

21+
import com.ning.http.util.StringUtils;
22+
2123
import java.util.ArrayList;
2224
import java.util.Arrays;
2325
import java.util.Collection;
@@ -397,7 +399,7 @@ public String getJoinedValue(String key, String delimiter) {
397399
} else if (values.size() == 1) {
398400
return values.get(0);
399401
} else {
400-
StringBuilder result = new StringBuilder();
402+
StringBuilder result = StringUtils.stringBuilder();
401403

402404
for (String value : values) {
403405
if (result.length() > 0) {
@@ -456,7 +458,7 @@ public int hashCode() {
456458

457459
@Override
458460
public String toString() {
459-
StringBuilder result = new StringBuilder();
461+
StringBuilder result = StringUtils.stringBuilder();
460462

461463
for (Map.Entry<String, List<String>> entry : values.entrySet()) {
462464
if (result.length() > 0) {

src/main/java/com/ning/http/client/FluentStringsMap.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import static com.ning.http.util.MiscUtils.isNonEmpty;
2020

21+
import com.ning.http.util.StringUtils;
22+
2123
import java.util.ArrayList;
2224
import java.util.Arrays;
2325
import java.util.Collection;
@@ -335,7 +337,7 @@ public String getJoinedValue(String key, String delimiter) {
335337
} else if (values.size() == 1) {
336338
return values.get(0);
337339
} else {
338-
StringBuilder result = new StringBuilder();
340+
StringBuilder result = StringUtils.stringBuilder();
339341

340342
for (String value : values) {
341343
if (result.length() > 0) {
@@ -406,7 +408,7 @@ public int hashCode() {
406408

407409
@Override
408410
public String toString() {
409-
StringBuilder result = new StringBuilder();
411+
StringBuilder result = StringUtils.stringBuilder();
410412

411413
for (Map.Entry<String, List<String>> entry : values.entrySet()) {
412414
if (result.length() > 0) {

src/main/java/com/ning/http/client/Realm.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import static java.nio.charset.StandardCharsets.UTF_8;
2222

2323
import com.ning.http.client.uri.Uri;
24+
import com.ning.http.util.StringUtils;
2425

2526
import java.io.UnsupportedEncodingException;
2627
import java.nio.charset.Charset;
@@ -560,7 +561,8 @@ private void newResponse() throws UnsupportedEncodingException {
560561
} catch (NoSuchAlgorithmException e) {
561562
throw new SecurityException(e);
562563
}
563-
md.update(new StringBuilder(principal)
564+
md.update(StringUtils.stringBuilder()
565+
.append(principal)
564566
.append(":")
565567
.append(realmName)
566568
.append(":")
@@ -571,21 +573,24 @@ private void newResponse() throws UnsupportedEncodingException {
571573
md.reset();
572574

573575
//HA2 if qop is auth-int is methodName:url:md5(entityBody)
574-
md.update(new StringBuilder(methodName)
576+
md.update(StringUtils.stringBuilder()
577+
.append(methodName)
575578
.append(':')
576579
.append(uri).toString().getBytes(ISO_8859_1));
577580
byte[] ha2 = md.digest();
578581

579582
if(qop==null || qop.equals("")) {
580-
md.update(new StringBuilder(toBase16(ha1))
583+
md.update(StringUtils.stringBuilder()
584+
.append(toBase16(ha1))
581585
.append(':')
582586
.append(nonce)
583587
.append(':')
584588
.append(toBase16(ha2)).toString().getBytes(ISO_8859_1));
585589

586590
} else {
587591
//qop ="auth" or "auth-int"
588-
md.update(new StringBuilder(toBase16(ha1))
592+
md.update(StringUtils.stringBuilder()
593+
.append(toBase16(ha1))
589594
.append(':')
590595
.append(nonce)
591596
.append(':')
@@ -604,7 +609,7 @@ private void newResponse() throws UnsupportedEncodingException {
604609
}
605610

606611
private static String toHexString(byte[] data) {
607-
StringBuilder buffer = new StringBuilder();
612+
StringBuilder buffer = StringUtils.stringBuilder();
608613
for (int i = 0; i < data.length; i++) {
609614
buffer.append(Integer.toHexString((data[i] & 0xf0) >>> 4));
610615
buffer.append(Integer.toHexString(data[i] & 0x0f));
@@ -614,7 +619,7 @@ private static String toHexString(byte[] data) {
614619

615620
private static String toBase16(byte[] bytes) {
616621
int base = 16;
617-
StringBuilder buf = new StringBuilder();
622+
StringBuilder buf = StringUtils.stringBuilder();
618623
for (byte b : bytes) {
619624
int bi = 0xff & b;
620625
int c = '0' + (bi / base) % base;

src/main/java/com/ning/http/client/RequestBuilderBase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.ning.http.client.uri.Uri;
2626
import com.ning.http.util.AsyncHttpProviderUtils;
2727
import com.ning.http.util.QueryComputer;
28+
import com.ning.http.util.StringUtils;
2829

2930
import java.io.File;
3031
import java.io.InputStream;
@@ -218,7 +219,7 @@ public List<Param> getQueryParams() {
218219

219220
@Override
220221
public String toString() {
221-
StringBuilder sb = new StringBuilder(getUrl());
222+
StringBuilder sb = StringUtils.stringBuilder().append(getUrl());
222223

223224
sb.append("\t");
224225
sb.append(method);

src/main/java/com/ning/http/client/cookie/Cookie.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*/
1313
package com.ning.http.client.cookie;
1414

15+
import com.ning.http.util.StringUtils;
16+
1517
public class Cookie {
1618

1719
public static Cookie newValidCookie(String name, String value, String domain, String rawValue, String path, long expires, int maxAge, boolean secure, boolean httpOnly) {
@@ -142,7 +144,7 @@ public boolean isHttpOnly() {
142144

143145
@Override
144146
public String toString() {
145-
StringBuilder buf = new StringBuilder();
147+
StringBuilder buf = StringUtils.stringBuilder();
146148
buf.append(name);
147149
buf.append("=");
148150
buf.append(rawValue);

src/main/java/com/ning/http/client/cookie/CookieDecoder.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import com.ning.http.client.date.CalendarTimeConverter;
1616
import com.ning.http.client.date.TimeConverter;
17+
import com.ning.http.util.StringUtils;
1718

1819
public class CookieDecoder {
1920

@@ -92,7 +93,7 @@ public static Cookie decode(String header, TimeConverter timeConverter) {
9293
char c = header.charAt(i);
9394
if (c == '"' || c == '\'') {
9495
// NAME="VALUE" or NAME='VALUE'
95-
StringBuilder newValueBuf = new StringBuilder(header.length() - i);
96+
StringBuilder newValueBuf = StringUtils.stringBuilder();
9697

9798
int rawValueStart = i;
9899
int rawValueEnd = i;

src/main/java/com/ning/http/client/cookie/CookieEncoder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
*/
1313
package com.ning.http.client.cookie;
1414

15+
import com.ning.http.util.StringUtils;
16+
1517
import java.util.Collection;
1618

1719
public final class CookieEncoder {
@@ -20,7 +22,7 @@ private CookieEncoder() {
2022
}
2123

2224
public static String encode(Collection<Cookie> cookies) {
23-
StringBuilder sb = new StringBuilder();
25+
StringBuilder sb = StringUtils.stringBuilder();
2426

2527
for (Cookie cookie : cookies) {
2628
add(sb, cookie.getName(), cookie.getRawValue());

src/main/java/com/ning/http/client/multipart/AbstractFilePart.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
import static java.nio.charset.StandardCharsets.*;
1616

17+
import com.ning.http.util.StringUtils;
18+
1719
import java.io.ByteArrayOutputStream;
1820
import java.io.IOException;
1921
import java.nio.charset.Charset;
@@ -112,7 +114,7 @@ public String getFileName() {
112114

113115
@Override
114116
public String toString() {
115-
return new StringBuilder()//
117+
return StringUtils.stringBuilder()//
116118
.append(super.toString())//
117119
.append(" filename=").append(fileName)//
118120
.toString();

src/main/java/com/ning/http/client/multipart/MultipartUtils.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@
1616
package com.ning.http.client.multipart;
1717

1818
import static java.nio.charset.StandardCharsets.*;
19-
2019
import static com.ning.http.client.multipart.Part.CRLF_BYTES;
2120
import static com.ning.http.client.multipart.Part.EXTRA_BYTES;
2221
import static com.ning.http.util.MiscUtils.isNonEmpty;
2322

2423
import com.ning.http.client.FluentCaseInsensitiveStringsMap;
24+
import com.ning.http.util.StringUtils;
25+
2526
import org.slf4j.Logger;
2627
import org.slf4j.LoggerFactory;
2728

@@ -101,7 +102,7 @@ private static byte[] generateMultipartBoundary() {
101102
}
102103

103104
private static String computeContentType(String base, byte[] multipartBoundary) {
104-
StringBuilder buffer = new StringBuilder(base);
105+
StringBuilder buffer = StringUtils.stringBuilder().append(base);
105106
if (!base.endsWith(";"))
106107
buffer.append(";");
107108
return buffer.append(" boundary=").append(new String(multipartBoundary, US_ASCII)).toString();

src/main/java/com/ning/http/client/multipart/PartBase.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
import static java.nio.charset.StandardCharsets.*;
1616

17+
import com.ning.http.util.StringUtils;
18+
1719
import java.io.IOException;
1820
import java.io.OutputStream;
1921
import java.nio.charset.Charset;
@@ -187,7 +189,7 @@ public long length(byte[] boundary) {
187189
}
188190

189191
public String toString() {
190-
return new StringBuilder()//
192+
return StringUtils.stringBuilder()//
191193
.append(getClass().getSimpleName())//
192194
.append(" name=").append(getName())//
193195
.append(" contentType=").append(getContentType())//

src/main/java/com/ning/http/client/oauth/ConsumerKey.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
*/
1717
package com.ning.http.client.oauth;
1818

19+
import com.ning.http.util.StringUtils;
20+
1921
/**
2022
* Value class for OAuth consumer keys.
2123
*/
@@ -38,7 +40,7 @@ public String getSecret() {
3840

3941
@Override
4042
public String toString() {
41-
StringBuilder sb = new StringBuilder("{Consumer key, key=");
43+
StringBuilder sb = StringUtils.stringBuilder().append("{Consumer key, key=");
4244
appendValue(sb, key);
4345
sb.append(", secret=");
4446
appendValue(sb, secret);

src/main/java/com/ning/http/client/oauth/OAuthSignatureCalculator.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.ning.http.client.SignatureCalculator;
2626
import com.ning.http.client.uri.Uri;
2727
import com.ning.http.util.Base64;
28+
import com.ning.http.util.StringUtils;
2829
import com.ning.http.util.UTF8UrlEncoder;
2930

3031
import java.util.ArrayList;
@@ -95,7 +96,7 @@ public void calculateAndAddSignature(Request request, RequestBuilderBase<?> requ
9596
*/
9697
public String calculateSignature(String method, Uri uri, long oauthTimestamp, String nonce,
9798
List<Param> formParams, List<Param> queryParams) {
98-
StringBuilder signedText = new StringBuilder(100);
99+
StringBuilder signedText = StringUtils.stringBuilder();
99100
signedText.append(method); // POST / GET etc (nothing to URL encode)
100101
signedText.append('&');
101102

@@ -111,7 +112,7 @@ else if (scheme.equals("https"))
111112
if (port == 443)
112113
port = -1;
113114

114-
StringBuilder sb = new StringBuilder().append(scheme).append("://").append(uri.getHost());
115+
StringBuilder sb = StringUtils.stringBuilder().append(scheme).append("://").append(uri.getHost());
115116
if (port != -1)
116117
sb.append(':').append(port);
117118
if (isNonEmpty(uri.getPath()))
@@ -162,7 +163,7 @@ else if (scheme.equals("https"))
162163
* Method used for constructing
163164
*/
164165
public String constructAuthHeader(String signature, String nonce, long oauthTimestamp) {
165-
StringBuilder sb = new StringBuilder(200);
166+
StringBuilder sb = StringUtils.stringBuilder();
166167
sb.append("OAuth ");
167168
sb.append(KEY_OAUTH_CONSUMER_KEY).append("=\"").append(consumerAuth.getKey()).append("\", ");
168169
if (userAuth.getKey() != null) {
@@ -217,7 +218,7 @@ public String sortAndConcat() {
217218
Arrays.sort(params);
218219

219220
// and build parameter section using pre-encoded pieces:
220-
StringBuilder encodedParams = new StringBuilder(100);
221+
StringBuilder encodedParams = StringUtils.stringBuilder();
221222
for (Parameter param : params) {
222223
if (encodedParams.length() > 0) {
223224
encodedParams.append('&');

src/main/java/com/ning/http/client/oauth/RequestToken.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
*/
1717
package com.ning.http.client.oauth;
1818

19+
import com.ning.http.util.StringUtils;
20+
1921
/**
2022
* Value class used for OAuth tokens (request secret, access secret);
2123
* simple container with two parts, public id part ("key") and
@@ -40,7 +42,7 @@ public String getSecret() {
4042

4143
@Override
4244
public String toString() {
43-
StringBuilder sb = new StringBuilder("{ key=");
45+
StringBuilder sb = StringUtils.stringBuilder().append("{ key=");
4446
appendValue(sb, key);
4547
sb.append(", secret=");
4648
appendValue(sb, secret);

src/main/java/com/ning/http/client/oauth/ThreadSafeHMAC.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import static java.nio.charset.StandardCharsets.*;
2020

21+
import com.ning.http.util.StringUtils;
2122
import com.ning.http.util.UTF8UrlEncoder;
2223

2324
import javax.crypto.Mac;
@@ -38,7 +39,7 @@ public class ThreadSafeHMAC {
3839
private final Mac mac;
3940

4041
public ThreadSafeHMAC(ConsumerKey consumerAuth, RequestToken userAuth) {
41-
StringBuilder sb = new StringBuilder(consumerAuth.getSecret().length() + userAuth.getSecret().length() + 16);
42+
StringBuilder sb =StringUtils.stringBuilder();
4243
UTF8UrlEncoder.appendEncoded(sb, consumerAuth.getSecret());
4344
sb.append('&');
4445
UTF8UrlEncoder.appendEncoded(sb, userAuth.getSecret());

src/main/java/com/ning/http/client/providers/grizzly/GrizzlyAsyncHttpProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
import com.ning.http.util.AuthenticatorUtils;
120120
import com.ning.http.util.ProxyUtils;
121121
import com.ning.http.util.SslUtils;
122+
import com.ning.http.util.StringUtils;
122123

123124
import javax.net.ssl.HostnameVerifier;
124125
import javax.net.ssl.SSLContext;
@@ -1064,7 +1065,7 @@ private void addCookies(final Request request,
10641065

10651066
final Collection<Cookie> cookies = request.getCookies();
10661067
if (isNonEmpty(cookies)) {
1067-
StringBuilder sb = new StringBuilder(128);
1068+
StringBuilder sb = StringUtils.stringBuilder();
10681069
org.glassfish.grizzly.http.Cookie[] gCookies =
10691070
new org.glassfish.grizzly.http.Cookie[cookies.size()];
10701071
convertCookies(cookies, gCookies);
@@ -2011,7 +2012,7 @@ public boolean doHandle(final FilterChainContext ctx,
20112012
}
20122013

20132014
if (isNonEmpty(request.getFormParams())) {
2014-
StringBuilder sb = new StringBuilder(128);
2015+
StringBuilder sb = StringUtils.stringBuilder();
20152016
for (Param param : request.getFormParams()) {
20162017
String name = URLEncoder.encode(param.getName(), charset);
20172018
String value = URLEncoder.encode(param.getValue(), charset);

src/main/java/com/ning/http/client/providers/jdk/MultipartRequestEntity.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.ning.http.client.multipart.MultipartUtils;
2323
import com.ning.http.client.multipart.Part;
2424
import com.ning.http.client.multipart.RequestEntity;
25+
import com.ning.http.util.StringUtils;
2526

2627
import java.io.IOException;
2728
import java.io.OutputStream;
@@ -99,7 +100,7 @@ public MultipartRequestEntity(List<Part> parts, FluentCaseInsensitiveStringsMap
99100
}
100101

101102
private String computeContentType(String base) {
102-
StringBuilder buffer = new StringBuilder(base);
103+
StringBuilder buffer = StringUtils.stringBuilder().append(base);
103104
if (!base.endsWith(";"))
104105
buffer.append(";");
105106
return buffer.append(" boundary=").append(new String(multipartBoundary, US_ASCII)).toString();

0 commit comments

Comments
 (0)