Reduce allocations in buildCanonicalHeaders

pull/384/head
Andrew Gaul 2021-10-31 20:16:06 +09:00
rodzic b6c2dc9b9c
commit cb3845c1ab
1 zmienionych plików z 21 dodań i 10 usunięć

Wyświetl plik

@ -210,29 +210,40 @@ final class AwsSignature {
private static String buildCanonicalHeaders(HttpServletRequest request,
List<String> signedHeaders) {
List<String> headers = new ArrayList<>();
List<String> headers = new ArrayList<>(
/*initialCapacity=*/ signedHeaders.size());
for (String header : signedHeaders) {
headers.add(header.toLowerCase());
}
Collections.sort(headers);
List<String> headersWithValues = new ArrayList<>();
StringBuilder headersWithValues = new StringBuilder();
boolean firstHeader = true;
for (String header : headers) {
List<String> values = new ArrayList<>();
StringBuilder headerWithValue = new StringBuilder();
headerWithValue.append(header);
headerWithValue.append(":");
if (firstHeader) {
firstHeader = false;
} else {
headersWithValues.append('\n');
}
headersWithValues.append(header);
headersWithValues.append(':');
boolean firstValue = true;
for (String value : Collections.list(request.getHeaders(header))) {
if (firstValue) {
firstValue = false;
} else {
headersWithValues.append(',');
}
value = value.trim();
if (!value.startsWith("\"")) {
value = value.replaceAll("\\s+", " ");
}
values.add(value);
headersWithValues.append(value);
}
headerWithValue.append(Joiner.on(",").join(values));
headersWithValues.add(headerWithValue.toString());
}
return Joiner.on("\n").join(headersWithValues);
return headersWithValues.toString();
}
private static String buildCanonicalQueryString(HttpServletRequest request)