问题标签 [filechannel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java NIO MappedByteBuffer OutOfMemoryException
我真的遇到了麻烦:我想使用FileChannel
s 和MappedByteBuffer
s 读取超过几 GB 的巨大文件 - 我发现的所有文档都表明使用该FileChannel.map()
方法映射文件相当简单。当然,2GB 是有限制的,因为所有 Buffer 方法都使用 int 来表示位置、限制和容量——但是低于该限制的系统隐含限制呢?
实际上,我遇到了很多关于OutOfMemoryException
s! 的问题!而且根本没有真正定义限制的文档!那么 - 我如何才能将适合 int-limit 的文件安全地映射到一个或几个MappedByteBuffer
s 而不会出现异常?
我可以在尝试之前询问系统我可以安全地映射文件的哪个部分FileChannel.map()
吗?如何?为什么有关此功能的文档很少?
java - 调用 map 方法后 Java 7 文件通道未正确关闭
我正在开发一个 sc2replay 解析工具。我在 MPQLIB http://code.google.com/p/mpqlib/之上构建它
不幸的是,该工具使用文件通道来读取 bzip 文件,并使用map(MapMode.READ_ONLY, hashtablePosition, hashTableSize);
调用该函数后,关闭文件通道不会在进程中释放文件。具体来说,我无法重命名/移动文件。
该问题出现在 Java 7 中,并且在 Java 6 上运行良好。
这是一个简单的代码片段来复制它:
注释掉 fc.map 将允许您重命名文件。
PS from here我应该关闭 FileChannel 吗?
它指出您不需要同时关闭文件通道和文件流,因为关闭一个会关闭另一个。我也尝试关闭一个或两个,但仍然没有奏效。
在 Java 7 上使用 FileChannel.map 读取数据后重命名文件是否有解决方法,因为现在每个人似乎都有 Java 7?
c++ - C++ 中的文件通道
在 java 中,有FileChannel可以从文件通道中读取。我还可以在频道中设置我想开始阅读的位置。
C ++ / C中有类似的功能吗?
java - 为什么改变初始化 RandomAccessFile 对象的方式会改变 FileChannel 的性能?
我正在研究将一些在磁盘上出现瓶颈的代码重写到 java 中的可能性。javadoc 没有说明为什么下面的前两个代码循环与后两个循环的执行方式如此不同:
运行此代码会产生如下内容:
如您所见,这会使c.force(true)
事情变慢一点。为什么在使用RandomAccessFile
“rwd”模式时事情会更慢。不应该“rwd”并且c.force(true)
是等效的。
java - 无法释放 Java FileLock
我没有与 nio 合作太多,并且在发布 FileLock 时遇到了一些麻烦。基本上,在 JVM-A 中,我在一个看起来像这样的文件上有一个不可共享的写锁:
然后在 JVM-B 中,我尝试在同一个文件上创建一个共享读锁,看起来像这样:
我的问题是 JVM-B 永远循环并且永远不会获得可共享的读锁。即使 JVM-A 存在writeLock.release();
writeChannel.close();
并且writeFile.close();
即使 JVM-A 退出并且不再运行,JVM-B 仍然无法获得文件的可共享读锁。
那么我在这里错过了什么?
java - 如何从具有 FileChannel 和 ByteBuffer 的文件中写入和读取 Java 对象中的字符串属性
下面是一个示例类,展示了我如何将 String 放入 ByteBuffer。我可以将字符串写入这样的文件,但我不确定如何知道字节数组的大小以在反序列化时再次读取标题。
java - How wait and get lock on file
I want wait till other program releases lock on particular file, then I want to proceed to open that unlocked file.
I came across many solutions, but none are useful, here is my code -
I know when I will be running this code, file will be locked by some other Windows process, so I want to wait till other process releases lock and then I will proceed with unlocked file. If I try to open locked file I will get FileNotFoundException
like "(The process cannot access the file because it is being used by another process)
".
In above code I can't wait for getting lock because same exception will be thrown in line "channel = new RandomAccessFile(file, "rw").getChannel();
"
Please help me on this, basically I want to get notified that other process has released lock on file, and till that time, I want to wait().
java - 有没有办法让 FileChannels 自动关闭?
我目前正在开发一个需要随机访问许多(60k-100k)相对大文件的应用程序。由于打开和关闭流是一项相当昂贵的操作,因此我更愿意将最大文件的 FileChannels 保持打开,直到不再需要它们为止。
问题是,由于 Java 7 的 try-with 语句没有涵盖这种行为,因此我需要手动关闭所有 FileChannel。但这变得越来越复杂,因为可以在整个软件中同时访问相同的文件。
我已经实现了一个 ChannelPool 类,它可以跟踪每个注册路径的打开的 FileChannel 实例。然后可以发出 ChannelPool 以关闭那些 Path 仅在特定时间间隔内被池本身弱引用的通道。我更喜欢事件侦听器方法,但我也不想听 GC。
来自 Apache Commons的FileChannelPool没有解决我的问题,因为通道仍然需要手动关闭。
这个问题有更优雅的解决方案吗?如果没有,如何改进我的实施?
编辑:感谢fge的回答,我现在完全有我需要的东西。谢谢!
java - 可以与分配给命名管道的文件通道一起使用 transferto/from
我有一个设置,其中一个程序从命名管道读取数据并将读取的数据写入套接字。另一个程序从套接字读取数据并将数据写入另一个命名管道。这是在跨节点的 Linux 上。在 Java FileChannels 上进行常规读取和写入都可以正常工作,但是当我尝试提高效率并使用 transferTo 在套接字通道上发送命名管道数据时,transferTo 总是返回传输的 0 字节。接收数据 transferFrom 更具决定性:它在尝试对命名管道进行搜索时遇到异常(命名管道上不允许搜索)。我在尝试做不可能的事吗?有没有人幸运地使用带有命名管道的 transferTo 和/或 transferFrom 。
谢谢。
java - IOUtils.closeQuitely 用于 FileChannel
我想知道 Apache 库方法 IOUtils.close 非常适合 FileChannel。我看到它需要 Closeable 作为参数,并且 FileChannel 确实在层次结构中实现了它。但是我们能不能面对任何问题。任何经验都可以分享。