OpenJDK / portola / portola
changeset 20541:bd0a8b142cb3
8024788: (fs) Files.readAllBytes uses FileChannel which may not be supported by all providers
Reviewed-by: chegar
author | alanb |
---|---|
date | Tue, 08 Oct 2013 10:49:09 +0100 |
parents | 1376a380b9ba |
children | a7dcd7811f02 6eb501508669 56898cefcda9 |
files | jdk/src/share/classes/java/nio/file/Files.java jdk/test/java/nio/file/Files/BytesAndLines.java |
diffstat | 2 files changed, 17 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/classes/java/nio/file/Files.java Tue Oct 08 11:17:15 2013 +0200 +++ b/jdk/src/share/classes/java/nio/file/Files.java Tue Oct 08 10:49:09 2013 +0100 @@ -3082,13 +3082,13 @@ * method is invoked to check read access to the file. */ public static byte[] readAllBytes(Path path) throws IOException { - try (FileChannel fc = FileChannel.open(path); - InputStream is = Channels.newInputStream(fc)) { - long size = fc.size(); + try (SeekableByteChannel sbc = Files.newByteChannel(path); + InputStream in = Channels.newInputStream(sbc)) { + long size = sbc.size(); if (size > (long)MAX_BUFFER_SIZE) throw new OutOfMemoryError("Required array size too large"); - return read(is, (int)size); + return read(in, (int)size); } }
--- a/jdk/test/java/nio/file/Files/BytesAndLines.java Tue Oct 08 11:17:15 2013 +0200 +++ b/jdk/test/java/nio/file/Files/BytesAndLines.java Tue Oct 08 10:49:09 2013 +0100 @@ -22,7 +22,9 @@ */ /* @test - * @bug 7006126 8020669 + * @bug 7006126 8020669 8024788 + * @build BytesAndLines PassThroughFileSystem + * @run main BytesAndLines * @summary Unit test for methods for Files readAllBytes, readAllLines and * and write methods. */ @@ -92,6 +94,16 @@ byte[] data = Files.readAllBytes(pathStat); assertTrue(data.length > 0, "Files.readAllBytes('" + statFile + "') failed to read"); } + + // test readAllBytes on custom file system + Path myfile = PassThroughFileSystem.create().getPath(file.toString()); + for (int size=0; size<=1024; size+=512) { + byte[] b1 = new byte[size]; + rand.nextBytes(b1); + Files.write(myfile, b1); + byte[] b2 = Files.readAllBytes(myfile); + assertTrue(Arrays.equals(b1, b2), "bytes not equal"); + } }