mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-21 02:48:02 +00:00
8024788: (fs) Files.readAllBytes uses FileChannel which may not be supported by all providers
Reviewed-by: chegar
This commit is contained in:
parent
5bc35911d0
commit
31fdd1b27c
@ -3082,13 +3082,13 @@ public final class Files {
|
||||
* 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 @@ public class BytesAndLines {
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user