提问人:dev_101 提问时间:7/12/2023 最后编辑:dev_101 更新时间:7/12/2023 访问量:60
将文件转换为 netty ByteBuf
Converting a file to netty ByteBuf
问:
我需要将一个大文件(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]
我尝试关闭(取消映射)使用,但似乎不起作用。Mappedbytebuffer
sun.misc.Cleaner
我还尝试了以下代码
ByteBuf buffer = buffer()
buffer.writeBytes(new FileInputStream(file), file.length());
当我在 16GB ram 上运行代码时,这有效,但在 4GB ram 系统上失败,这给了我堆内存问题。
您能否建议一个代码,将大文件转换为可以使用 JDK 4 在 8GB 内存上运行的 netty bytebuf。
答: 暂无答案
评论