8191516: OutputStream.write(byte[],int,int) could have fewer parameter bounds checks
authorbpb
Wed, 22 Nov 2017 08:12:45 -0800
changeset 47920 52c9e8d2f8d9
parent 47919 66350f079368
child 47921 4501f0b68a31
8191516: OutputStream.write(byte[],int,int) could have fewer parameter bounds checks Summary: Reduce parameter bounds checks from five to three as in InputStream::read Reviewed-by: psandoz
src/java.base/share/classes/java/io/InputStream.java
src/java.base/share/classes/java/io/OutputStream.java
--- a/src/java.base/share/classes/java/io/InputStream.java	Wed Nov 22 16:12:05 2017 +0100
+++ b/src/java.base/share/classes/java/io/InputStream.java	Wed Nov 22 08:12:45 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -164,11 +164,9 @@
      * @see        java.io.InputStream#read()
      */
     public int read(byte b[], int off, int len) throws IOException {
-        if (b == null) {
-            throw new NullPointerException();
-        } else if (off < 0 || len < 0 || len > b.length - off) {
-            throw new IndexOutOfBoundsException();
-        } else if (len == 0) {
+        Objects.requireNonNull(b);
+        Objects.checkFromIndexSize(off, len, b.length);
+        if (len == 0) {
             return 0;
         }
 
@@ -302,8 +300,8 @@
      */
     public int readNBytes(byte[] b, int off, int len) throws IOException {
         Objects.requireNonNull(b);
-        if (off < 0 || len < 0 || len > b.length - off)
-            throw new IndexOutOfBoundsException();
+        Objects.checkFromIndexSize(off, len, b.length);
+
         int n = 0;
         while (n < len) {
             int count = read(b, off + n, len - n);
--- a/src/java.base/share/classes/java/io/OutputStream.java	Wed Nov 22 16:12:05 2017 +0100
+++ b/src/java.base/share/classes/java/io/OutputStream.java	Wed Nov 22 08:12:45 2017 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,8 @@
 
 package java.io;
 
+import java.util.Objects;
+
 /**
  * This abstract class is the superclass of all classes representing
  * an output stream of bytes. An output stream accepts output bytes
@@ -104,14 +106,9 @@
      *             stream is closed.
      */
     public void write(byte b[], int off, int len) throws IOException {
-        if (b == null) {
-            throw new NullPointerException();
-        } else if ((off < 0) || (off > b.length) || (len < 0) ||
-                   ((off + len) > b.length) || ((off + len) < 0)) {
-            throw new IndexOutOfBoundsException();
-        } else if (len == 0) {
-            return;
-        }
+        Objects.requireNonNull(b);
+        Objects.checkFromIndexSize(off, len, b.length);
+        // len == 0 condition implicitly handled by loop bounds
         for (int i = 0 ; i < len ; i++) {
             write(b[off + i]);
         }