From 0d5e0176127e273ba583fbdcd81826fc5053fbfc Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=B6rg=20Kubitz?= Date: Thu, 17 Aug 2023 11:20:13 +0200 Subject: [PATCH] IO: use JDK convenience methods The benefit is that certain InputStreams can override the default implementation for performance reasons. Change-Id: I4c924157ec0f0ec63b0eca7cdbdc9325af24cab6 --- .../src/org/eclipse/jgit/util/IO.java | 86 ++----------------- 1 file changed, 9 insertions(+), 77 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java index 80877bbdc6..8cc5316271 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/IO.java @@ -66,19 +66,7 @@ public class IO { public static final byte[] readSome(File path, int limit) throws FileNotFoundException, IOException { try (SilentFileInputStream in = new SilentFileInputStream(path)) { - byte[] buf = new byte[limit]; - int cnt = 0; - for (;;) { - int n = in.read(buf, cnt, buf.length - cnt); - if (n <= 0) - break; - cnt += n; - } - if (cnt == buf.length) - return buf; - byte[] res = new byte[cnt]; - System.arraycopy(buf, 0, res, 0, cnt); - return res; + return in.readNBytes(limit); } } @@ -99,37 +87,10 @@ public class IO { public static final byte[] readFully(File path, int max) throws FileNotFoundException, IOException { try (SilentFileInputStream in = new SilentFileInputStream(path)) { - long sz = Math.max(path.length(), 1); - if (sz > max) + byte[] buf = in.readNBytes(max); + if (in.read() != -1) { throw new IOException(MessageFormat.format( JGitText.get().fileIsTooLarge, path)); - - byte[] buf = new byte[(int) sz]; - int valid = 0; - for (;;) { - if (buf.length == valid) { - if (buf.length == max) { - int next = in.read(); - if (next < 0) - break; - - throw new IOException(MessageFormat.format( - JGitText.get().fileIsTooLarge, path)); - } - - byte[] nb = new byte[Math.min(buf.length * 2, max)]; - System.arraycopy(buf, 0, nb, 0, valid); - buf = nb; - } - int n = in.read(buf, valid, buf.length - valid); - if (n < 0) - break; - valid += n; - } - if (valid < buf.length) { - byte[] nb = new byte[valid]; - System.arraycopy(buf, 0, nb, 0, valid); - buf = nb; } return buf; } @@ -157,26 +118,7 @@ public class IO { */ public static ByteBuffer readWholeStream(InputStream in, int sizeHint) throws IOException { - byte[] out = new byte[sizeHint]; - int pos = 0; - while (pos < out.length) { - int read = in.read(out, pos, out.length - pos); - if (read < 0) - return ByteBuffer.wrap(out, 0, pos); - pos += read; - } - - int last = in.read(); - if (last < 0) - return ByteBuffer.wrap(out, 0, pos); - - try (TemporaryBuffer.Heap tmp = new TemporaryBuffer.Heap( - Integer.MAX_VALUE)) { - tmp.write(out); - tmp.write(last); - tmp.copy(in); - return ByteBuffer.wrap(tmp.toByteArray()); - } + return ByteBuffer.wrap(in.readAllBytes()); } /** @@ -197,13 +139,9 @@ public class IO { */ public static void readFully(final InputStream fd, final byte[] dst, int off, int len) throws IOException { - while (len > 0) { - final int r = fd.read(dst, off, len); - if (r <= 0) - throw new EOFException(JGitText.get().shortReadOfBlock); - off += r; - len -= r; - } + int read = fd.readNBytes(dst, off, len); + if (read != len) + throw new EOFException(JGitText.get().shortReadOfBlock); } /** @@ -271,14 +209,7 @@ public class IO { */ public static int readFully(InputStream fd, byte[] dst, int off) throws IOException { - int r; - int len = 0; - while (off < dst.length - && (r = fd.read(dst, off, dst.length - off)) >= 0) { - off += r; - len += r; - } - return len; + return fd.readNBytes(dst, off, dst.length - off); } /** @@ -300,6 +231,7 @@ public class IO { */ public static void skipFully(InputStream fd, long toSkip) throws IOException { + // same as fd.skipNBytes(toSkip) of JDK 12; while (toSkip > 0) { final long r = fd.skip(toSkip); if (r <= 0) -- 2.39.5