将文件转换为 netty ByteBuf

Converting a file to netty ByteBuf

提问人:dev_101 提问时间:7/12/2023 最后编辑:dev_101 更新时间:7/12/2023 访问量:60

问:

我需要将一个大文件(2GB)转换为netty byteBuf。我正在使用以下代码,它的工作原理

File file = (File) fw;
                FileInputStream fileInputStream = new FileInputStream(file);
                FileChannel fileChannel = fileInputStream.getChannel();
                MappedByteBuffer mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, file.length());
                setDataToTransfer(Unpooled.wrappedBuffer(mappedByteBuffer)); //Data to transfer is a byteBuf

但是当我重新运行该操作时,它给了我以下错误

(The requested operation cannot be performed on a file with a user-mapped section open)
at java.base/java.io.FileOutputStream.open0(Native Method) ~[na:na]
at java.base/java.io.FileOutputStream.open(FileOutputStream.java:298) ~[na:na]
at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:237) ~[na:na]
at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:187) ~[na:na]

我尝试关闭(取消映射)使用,但似乎不起作用。Mappedbytebuffersun.misc.Cleaner

我还尝试了以下代码

ByteBuf buffer =    buffer()
buffer.writeBytes(new FileInputStream(file), file.length());

当我在 16GB ram 上运行代码时,这有效,但在 4GB ram 系统上失败,这给了我堆内存问题。

您能否建议一个代码,将大文件转换为可以使用 JDK 4 在 8GB 内存上运行的 netty bytebuf。

Java 文件 字节缓冲 mappedbytebuffer

评论


答: 暂无答案