|
43 | 43 | import com.palantir.logsafe.UnsafeArg;
|
44 | 44 | import com.palantir.logsafe.exceptions.SafeIllegalStateException;
|
45 | 45 | import com.palantir.logsafe.exceptions.SafeRuntimeException;
|
| 46 | +import com.palantir.logsafe.exceptions.SafeUncheckedIoException; |
46 | 47 | import feign.Request;
|
47 | 48 | import java.io.ByteArrayInputStream;
|
48 | 49 | import java.io.IOException;
|
49 | 50 | import java.io.InputStream;
|
50 | 51 | import java.io.InputStreamReader;
|
51 | 52 | import java.io.OutputStream;
|
52 | 53 | import java.io.Reader;
|
| 54 | +import java.io.StringReader; |
53 | 55 | import java.io.UnsupportedEncodingException;
|
54 | 56 | import java.net.URLDecoder;
|
55 | 57 | import java.nio.charset.StandardCharsets;
|
@@ -239,6 +241,18 @@ public InputStream asInputStream() {
|
239 | 241 |
|
240 | 242 | @Override
|
241 | 243 | public Reader asReader() {
|
| 244 | + Integer maybeLength = length(); |
| 245 | + if (maybeLength != null && maybeLength.intValue() < 8192) { |
| 246 | + // Avoid InputStreamReader / HeapByteBuffer overhead for small (less than 8KiB) inputs, |
| 247 | + // see https://github.com/FasterXML/jackson-core/pull/1081 |
| 248 | + try (InputStream inputStream = asInputStream()) { |
| 249 | + String content = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); |
| 250 | + return new StringReader(content); |
| 251 | + } catch (IOException e) { |
| 252 | + throw new SafeUncheckedIoException( |
| 253 | + "Failed to read response body", e, SafeArg.of("length", maybeLength)); |
| 254 | + } |
| 255 | + } |
242 | 256 | return new InputStreamReader(asInputStream(), StandardCharsets.UTF_8);
|
243 | 257 | }
|
244 | 258 |
|
|
0 commit comments