From 37ecdd14372555c018c644e980666e47c06dcbe8 Mon Sep 17 00:00:00 2001 From: Patrick Strawderman Date: Tue, 13 May 2025 14:51:22 -0700 Subject: [PATCH] Forward more methods to underlying InputStream in NonClosingInputStream NonClosingInputStream extends FilterInputStream, which does not forward some newer InputStream methods such as transferTo and readAllBytes. Specific InputStream implementations may have more optimized methods (e.g., FileInputStream). Closes gh-34893 Signed-off-by: Patrick Strawderman --- .../org/springframework/util/StreamUtils.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) 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 99b44e03f29..354e7b2cf20 100644 --- a/spring-core/src/main/java/org/springframework/util/StreamUtils.java +++ b/spring-core/src/main/java/org/springframework/util/StreamUtils.java @@ -239,7 +239,7 @@ public abstract class StreamUtils { } - private static class NonClosingInputStream extends FilterInputStream { + private static final class NonClosingInputStream extends FilterInputStream { public NonClosingInputStream(InputStream in) { super(in); @@ -248,10 +248,30 @@ public abstract class StreamUtils { @Override public void close() throws IOException { } + + @Override + public byte[] readAllBytes() throws IOException { + return in.readAllBytes(); + } + + @Override + public byte[] readNBytes(int len) throws IOException { + return in.readNBytes(len); + } + + @Override + public int readNBytes(byte[] b, int off, int len) throws IOException { + return in.readNBytes(b, off, len); + } + + @Override + public long transferTo(OutputStream out) throws IOException { + return in.transferTo(out); + } } - private static class NonClosingOutputStream extends FilterOutputStream { + private static final class NonClosingOutputStream extends FilterOutputStream { public NonClosingOutputStream(OutputStream out) { super(out);