diff --git a/spring-core/src/main/java/org/springframework/util/FileCopyUtils.java b/spring-core/src/main/java/org/springframework/util/FileCopyUtils.java index 37fb1a960b55..73140dd80e70 100644 --- a/spring-core/src/main/java/org/springframework/util/FileCopyUtils.java +++ b/spring-core/src/main/java/org/springframework/util/FileCopyUtils.java @@ -108,12 +108,10 @@ public static int copy(InputStream in, OutputStream out) throws IOException { Assert.notNull(in, "No InputStream specified"); Assert.notNull(out, "No OutputStream specified"); - try { - return StreamUtils.copy(in, out); - } - finally { - close(in); - close(out); + try (in; out) { + int count = (int) in.transferTo(out); + out.flush(); + return count; } } diff --git a/spring-core/src/main/java/org/springframework/util/StreamUtils.java b/spring-core/src/main/java/org/springframework/util/StreamUtils.java index f57943a29e8d..04fcd15b90e6 100644 --- a/spring-core/src/main/java/org/springframework/util/StreamUtils.java +++ b/spring-core/src/main/java/org/springframework/util/StreamUtils.java @@ -65,9 +65,7 @@ public static byte[] copyToByteArray(@Nullable InputStream in) throws IOExceptio return new byte[0]; } - ByteArrayOutputStream out = new ByteArrayOutputStream(BUFFER_SIZE); - copy(in, out); - return out.toByteArray(); + return in.readAllBytes(); } /** diff --git a/spring-web/src/main/java/org/springframework/http/converter/ByteArrayHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/ByteArrayHttpMessageConverter.java index 648f2406bd9d..b5be96421b46 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/ByteArrayHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/ByteArrayHttpMessageConverter.java @@ -16,7 +16,6 @@ package org.springframework.http.converter; -import java.io.ByteArrayOutputStream; import java.io.IOException; import org.springframework.http.HttpInputMessage; @@ -53,11 +52,7 @@ public boolean supports(Class clazz) { @Override public byte[] readInternal(Class clazz, HttpInputMessage inputMessage) throws IOException { - long contentLength = inputMessage.getHeaders().getContentLength(); - ByteArrayOutputStream bos = - new ByteArrayOutputStream(contentLength >= 0 ? (int) contentLength : StreamUtils.BUFFER_SIZE); - StreamUtils.copy(inputMessage.getBody(), bos); - return bos.toByteArray(); + return inputMessage.getBody().readAllBytes(); } @Override diff --git a/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java index f587aecf7ff9..0b54b1ca085e 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java @@ -19,6 +19,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.InputStreamResource; @@ -131,22 +132,13 @@ protected void writeInternal(Resource resource, HttpOutputMessage outputMessage) protected void writeContent(Resource resource, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { - try { - InputStream in = resource.getInputStream(); - try { - StreamUtils.copy(in, outputMessage.getBody()); - } - catch (NullPointerException ex) { - // ignore, see SPR-13620 - } - finally { - try { - in.close(); - } - catch (Throwable ex) { - // ignore, see SPR-12999 - } - } + try (InputStream in = resource.getInputStream()){ + OutputStream out = outputMessage.getBody(); + in.transferTo(out); + out.flush(); + } + catch (NullPointerException ex) { + // ignore, see SPR-13620 } catch (FileNotFoundException ex) { // ignore, see SPR-12999