@@ -234,10 +234,9 @@ default String readCString() throws IOException {
234234 }
235235
236236 /** Reads a string of up to length n. */
237- default String readString (int n ) throws IOException {
238- final long avail = length () - offset ();
239- if (n > avail ) n = (int ) avail ;
240- final byte [] b = new byte [n ];
237+ default String readString (final int n ) throws IOException {
238+ final int r = (int ) available (n );
239+ final byte [] b = new byte [r ];
241240 readFully (b );
242241 return new String (b , getEncoding ());
243242 }
@@ -433,11 +432,10 @@ default int read(byte[] b) throws IOException {
433432 * @throws IOException - if an I/O error occurs.
434433 */
435434 default long skip (final long n ) throws IOException {
436- if (n < 0 ) return 0 ;
437- final long remain = length () - offset ();
438- final long num = n < remain ? n : remain ;
439- seek (offset () + num );
440- return num ;
435+ final long skip = available (n );
436+ if (skip <= 0 ) return 0 ;
437+ seek (offset () + skip );
438+ return skip ;
441439 }
442440
443441 // -- DataInput methods --
@@ -560,10 +558,11 @@ default String readUTF() throws IOException {
560558
561559 @ Override
562560 default int skipBytes (final int n ) throws IOException {
563- final int skipped = (int ) Math .min (n , length () - offset ());
564- if (skipped < 0 ) return 0 ;
565- seek (offset () + skipped );
566- return skipped ;
561+ // NB: Cast here is safe since the value of n bounds the result to an int.
562+ final int skip = (int ) available (n );
563+ if (skip < 0 ) return 0 ;
564+ seek (offset () + skip );
565+ return skip ;
567566 }
568567
569568 // -- DataOutput methods --
0 commit comments