diff --git a/vertx-core/src/main/java/io/vertx/core/file/impl/FileSystemImpl.java b/vertx-core/src/main/java/io/vertx/core/file/impl/FileSystemImpl.java index 3b26f87cceb..338dc415111 100644 --- a/vertx-core/src/main/java/io/vertx/core/file/impl/FileSystemImpl.java +++ b/vertx-core/src/main/java/io/vertx/core/file/impl/FileSystemImpl.java @@ -14,45 +14,21 @@ import io.vertx.codegen.annotations.Nullable; import io.vertx.core.Future; import io.vertx.core.buffer.Buffer; -import io.vertx.core.file.AsyncFile; -import io.vertx.core.file.CopyOptions; -import io.vertx.core.file.FileProps; +import io.vertx.core.file.*; import io.vertx.core.file.FileSystem; import io.vertx.core.file.FileSystemException; -import io.vertx.core.file.FileSystemProps; -import io.vertx.core.file.OpenOptions; import io.vertx.core.internal.ContextInternal; import io.vertx.core.internal.VertxInternal; +import io.vertx.core.internal.buffer.BufferInternal; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.io.RandomAccessFile; -import java.nio.file.CopyOption; -import java.nio.file.FileAlreadyExistsException; -import java.nio.file.FileStore; -import java.nio.file.FileVisitOption; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.LinkOption; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.StandardCopyOption; -import java.nio.file.attribute.BasicFileAttributes; -import java.nio.file.attribute.FileAttribute; -import java.nio.file.attribute.GroupPrincipal; -import java.nio.file.attribute.PosixFileAttributeView; -import java.nio.file.attribute.PosixFilePermission; -import java.nio.file.attribute.PosixFilePermissions; -import java.nio.file.attribute.UserPrincipal; -import java.nio.file.attribute.UserPrincipalLookupService; -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.nio.channels.FileChannel; +import java.nio.file.*; +import java.nio.file.attribute.*; +import java.util.*; import java.util.concurrent.Callable; import java.util.regex.Pattern; @@ -875,8 +851,16 @@ private BlockingAction readFileInternal(String path) { public Buffer perform() { try { Path target = resolveFile(path).toPath(); - byte[] bytes = Files.readAllBytes(target); - return Buffer.buffer(bytes); + try (FileChannel fc = FileChannel.open(target, StandardOpenOption.READ)) { + long size = fc.size(); + if (size > (long) Integer.MAX_VALUE) { + throw new OutOfMemoryError("File is too big"); + } + int len = (int) size; + BufferInternal res = BufferInternal.buffer(len); + res.unwrap().writeBytes(fc, 0, len); + return res; + } } catch (IOException e) { throw new FileSystemException(getFileAccessErrorMessage("read", path), e); }