提交 ff2bca20 编写于 作者: A alanb

8024788: (fs) Files.readAllBytes uses FileChannel which may not be supported by all providers

Reviewed-by: chegar
上级 4f1307a9
......@@ -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");
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册