OpenJDK / amber / amber
changeset 3955:a585e5ca5e4a
6884800: (file) Path.newInputStream does not usefully implement available()
Reviewed-by: martin, chegar
author | alanb |
---|---|
date | Sun, 04 Oct 2009 15:42:00 +0100 |
parents | 19ed60dbd0b7 |
children | 2586d23078e4 |
files | jdk/src/share/classes/sun/nio/ch/ChannelInputStream.java jdk/test/java/nio/channels/Channels/Basic.java |
diffstat | 2 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/classes/sun/nio/ch/ChannelInputStream.java Fri Oct 02 08:49:25 2009 -0700 +++ b/jdk/src/share/classes/sun/nio/ch/ChannelInputStream.java Sun Oct 04 15:42:00 2009 +0100 @@ -109,6 +109,16 @@ return ChannelInputStream.read(ch, bb, true); } + public int available() throws IOException { + // special case where the channel is to a file + if (ch instanceof SeekableByteChannel) { + SeekableByteChannel sbc = (SeekableByteChannel)ch; + long rem = Math.max(0, sbc.size() - sbc.position()); + return (rem > Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int)rem; + } + return 0; + } + public void close() throws IOException { ch.close(); }
--- a/jdk/test/java/nio/channels/Channels/Basic.java Fri Oct 02 08:49:25 2009 -0700 +++ b/jdk/test/java/nio/channels/Channels/Basic.java Sun Oct 04 15:42:00 2009 +0100 @@ -22,7 +22,7 @@ */ /* @test - * @bug 4417152 4481572 6248930 6725399 + * @bug 4417152 4481572 6248930 6725399 6884800 * @summary Test Channels basic functionality */ @@ -225,8 +225,7 @@ private static void testNewInputStream(File blah) throws Exception { FileInputStream fis = new FileInputStream(blah); FileChannel fc = fis.getChannel(); - ReadableByteChannel rbc = (ReadableByteChannel)fc; - InputStream is = Channels.newInputStream(rbc); + InputStream is = Channels.newInputStream(fc); int messageSize = message.length() * ITERATIONS * 3 + 1; byte bb[] = new byte[messageSize]; @@ -234,8 +233,13 @@ int totalRead = 0; while (bytesRead != -1) { totalRead += bytesRead; + long rem = Math.min(fc.size() - totalRead, (long)Integer.MAX_VALUE); + if (is.available() != (int)rem) + throw new RuntimeException("available not useful or not maximally useful"); bytesRead = is.read(bb, totalRead, messageSize - totalRead); } + if (is.available() != 0) + throw new RuntimeException("available() should return 0 at EOF"); String result = new String(bb, 0, totalRead, encoding); int len = message.length();