问题标签 [java-nio]
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 - 这个 NIO 读取是如何在幕后工作的?
我是响应式编程的新手,我正在阅读Josh Long 的 Reactive Spring。
在第 4 章中,他介绍了一个小程序来展示非阻塞文件读取的实际工作原理。
关于这段代码实际上是如何工作的,我有很多问题:
- 为什么我们需要一个单独的线程池?(
Executors.newFixedThreadPool(10)
) - 读取 IO 操作是否真的发生在线程池中的线程上?如果是这样,那么我旋转线程和在那里阅读有什么区别?如果非阻塞只是使用不同的线程,那我为什么需要 NIO 或非阻塞 API 呢?
- 如果执行实际读取的线程正在等待来自磁盘的数据,那么该线程会发生什么?会一直阻塞吗?
- 同样,如果线程没有被阻塞,那么为什么不让一个线程来完成所有工作呢?为什么要启动多个线程?
我知道这些问题一定是非常基本的,但我还没有得到任何一个具体的答案。
java - Java 文件夹/文件监视
我正在尝试构建一个监视文件夹及其子文件夹以检测文件创建或修改的应用程序。要观看的文件总数将每天增加。
我曾尝试使用 java nio WatchService 和 apache common FileAlterationObserver。WatchService 有时会在使用 WatchKey 后重置之前发生文件创建/修改时丢失事件。由于 FileAlterationObserver 基于轮询,因此当文件数增加时,性能也会下降。
构建这样一个应用程序的最佳方法是什么?
java - 压缩文件内压缩文件的文件系统
可以java.nio.file.FileSystem
为 zip 文件中的 zip 文件创建一个吗?
如果是这样,URI 是什么样的?
如果没有,我假设我将不得不回退到使用 ZipInputStream。
我正在尝试递归到下面的方法。当前实现创建了一个 URI“jar:jar:...”。我知道那是错误的(并且是对电影角色的潜在创伤性提醒)。应该是什么?
java - Java NIO - 通道附件是按值传递还是按引用传递?
我正在学习 Java NIO API,并且能够理解除了attachment
对象之外的东西是如何工作的。
据我了解,我们可以创建channels
类似socketChannels
并将对象附加到它们。每当给定通道上有事件时,我们就可以拾取它及其附加对象。
在这里,我需要修改此对象(再添加一个 key 和 value )并将其注册到另一个频道 say upstream channel
。考虑负载均衡器 - 从前端获取请求并将其传递给upstream channel
问题是当我修改对象时upstream channel
,它socket channel
也会被修改。
要检查这一点 - 我已经简化了代码。你能告诉我如何attachement
工作吗?
我的问题是,当我random_value
在 hashmap 中添加一个键时,附件对象如何serverSocket
自动更改。
根据我的理解,只有当我再次使用通道的 selectionKey 附加修改后的对象时,它才会发生变化。
java - Java Watch Service 的可靠替代方案
我正在使用 Java nio 的 WatchService,但我发现它对于以下用例非常不可靠:
当一个非常大的文件(> 500 megs)被写入正在监视的目录时,如果我依赖 ENTRY_CREATE 事件,该文件通常还没有准备好读取 - 它仍在由另一个线程写入。所以我通常求助于监听 ENTRY_MODIFY。
但是,当数千个小型 (~2Kb) 文件被复制到监视目录时,其中 80% 的 ENTRY_CREATE 或 ENTRY_MODIFY 不会被调用!
有没有其他人遇到过这个?是否有更好更可靠的库,或者我应该简单地切换到阻塞队列实现,文件复制器将文件名添加到队列中,消费者线程处理文件处理?
围绕 WatchService 实现的代码:
udp - 我怎样才能做非阻塞数据报通道服务器?
我正在努力理解如何使用Selector
和DatagramChannel
.
困惑来自对基于 TCP 的知识的理解。
问题。
OP_READ
我应该在第OP_WRITER
一次注册频道吗?- 或者我应该像上面那样更新interestOps?
- 总是会
selectedKeys()
返回一组单个元素吗?