Skip to content

Commit 2d19331

Browse files
committed
Optimize DialogueFeignClient small response reader
Avoid InputStreamReader / HeapByteBuffer overhead for small (less than 8KiB) inputs, see FasterXML/jackson-core#1081
1 parent b9d7abb commit 2d19331

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

conjure-java-jaxrs-client/src/main/java/com/palantir/conjure/java/client/jaxrs/DialogueFeignClient.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
import java.io.InputStreamReader;
5151
import java.io.OutputStream;
5252
import java.io.Reader;
53-
import java.io.UnsupportedEncodingException;
53+
import java.io.StringReader;
5454
import java.net.URLDecoder;
5555
import java.nio.charset.StandardCharsets;
5656
import java.util.Collection;
@@ -143,11 +143,7 @@ private static boolean includeRequestHeader(String headerName) {
143143
}
144144

145145
private static String urlDecode(String input) {
146-
try {
147-
return URLDecoder.decode(input, "UTF-8");
148-
} catch (UnsupportedEncodingException e) {
149-
throw new SafeUncheckedIoException("Failed to decode path segment", e, UnsafeArg.of("encoded", input));
150-
}
146+
return URLDecoder.decode(input, StandardCharsets.UTF_8);
151147
}
152148

153149
private static Optional<RequestBody> requestBody(Request request) {
@@ -239,6 +235,17 @@ public InputStream asInputStream() {
239235

240236
@Override
241237
public Reader asReader() {
238+
Integer maybeLength = length();
239+
if (maybeLength != null && maybeLength < 8192) {
240+
// Avoid InputStreamReader / HeapByteBuffer overhead for small (less than 8KiB) inputs,
241+
// see https://github.com/FasterXML/jackson-core/pull/1081
242+
try (InputStream inputStream = asInputStream()) {
243+
return new StringReader(new String(inputStream.readAllBytes(), StandardCharsets.UTF_8));
244+
} catch (IOException e) {
245+
throw new SafeUncheckedIoException(
246+
"Failed to read response body", e, SafeArg.of("length", maybeLength));
247+
}
248+
}
242249
return new InputStreamReader(asInputStream(), StandardCharsets.UTF_8);
243250
}
244251

0 commit comments

Comments
 (0)