问题标签 [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 - FileChannel 和 RandomAccessFile 似乎不起作用
简单来说:一个使用 sqlitejdbc 作为后端的摇摆应用程序。目前,启动使用同一数据库文件的多个实例没有问题。应该有。该文件被锁定(在应用程序运行时无法删除它),因此检查应该是微不足道的。结果不是。
结果是
无论应用程序是否正在运行。我错过了重点吗?TIA。
java - 如何使用 serversocketchannel 从端口获取最大字节数
我正在使用nio
包开发一个多端口读取应用程序。实际上这些端口连续接收数据包。使用nio
包我们必须使用通道读取数据包。不应该有丢包。请提出一种可行的方法来处理缓冲区,以便我可以将整个数据 dmp 到数据库中而不会丢失。
这是我的代码:
我很困惑 else if ((key.readyOps() & SelectionKey.OP_READ)== SelectionKey.OP_READ)
。
java - Java 中的非阻塞 UDP I/O 与阻塞 UDP I/O
非阻塞 TCP/IPSocketChannel
和Selector
NIO 帮助我用少量线程处理许多 TCP/IP 连接。但是 UDPDatagramChannels
呢?(我必须承认我对 UDP 不是很熟悉。)
DatagramChannel
即使未在阻塞模式下运行,UDP 发送操作似乎也不会阻塞。是否真的存在DatagramSocket.send(DatagramPacket)
由于拥塞或类似原因而导致阻塞的情况?我真的很好奇是否存在这种情况以及生产环境中存在哪些可能的情况。
如果DatagramSocket.send(DatagramPacket)
实际上没有阻塞并且我不会使用已连接DatagramSocket
并仅绑定到一个端口,那么将非阻塞模式与DatagramChannel
and一起使用没有优势Selector
吗?
java - 将字节从一个 ByteBuffer 传输到另一个
将尽可能多的字节从 ByteBufferbbuf_src
放入另一个 ByteBuffer的最有效方法是什么bbuf_dest
(以及知道传输了多少字节)?我正在尝试bbuf_dest.put(bbuf_src)
,但它似乎想抛出一个 BufferOverflowException 并且当我需要它们时,我现在无法从 Sun 获取 javadocs(网络问题)。>:(啊。
编辑:darnit,如果 bbuf_src 是只读缓冲区,@Richard 的方法(使用支持数组中的 put() bbuf_src
)将不起作用,因为您无法访问该数组。这种情况下我能做什么???
java - Java处理大文件有哪些小技巧
我需要对 Java 中的大文件执行简单的 grep 和其他操作。我对 Java NIO 实用程序不太熟悉,但我假设这是我需要使用的。你有什么资源或有用的提示来读/写大文件。另外,我正在开发一个 SWT 应用程序,需要在 GUI 的文本区域内显示部分数据。
java - 扩展 ByteBuffer 类
有没有办法创建扩展 ByteBuffer 类的类?
ByteBuffer 中的一些抽象方法是包私有的,如果我创建包 java.nio,则会引发安全异常。
出于性能原因,我想这样做——例如 getInt 有大约 10 个方法调用,以及相当多的 if 方法。即使保留所有检查,并且仅内联方法调用并删除大/小端检查,我创建的测试表明它可以快 4 倍左右。
c# - .NET 的任何 NIO 框架?
.NET 是否有任何非阻塞 IO 框架?
我正在寻找类似于Apache Mina和JBoss Netty为 Java 提供的东西:一个用于实现高度可扩展的服务器的框架——而不仅仅是 .NET 框架提供的低级支持。
编辑:为了更好地解释我希望看到的内容,这里有一个基本示例,说明您可以使用 Mina 做什么:
在 Mina 中,我可以像这样实现 ProtocolDecoder:
还有一个像这样的 CommandHandler:
如果我通过调用启动服务器
我将获得一个非阻塞服务器。
它将运行一个(或至少几个)线程,循环遍历所有传入的连接,从套接字收集数据,并调用SimpleDecoder.doDecode()
以查看它是否在连接上有完整的命令。然后它将命令传递给CommandHandler.messageReceived()
,我可以接管处理。
java - Gets byte array from a ByteBuffer in java
Is this the recommended way to get the bytes from the ByteBuffer
java - Java中排序(内存映射?)文件中的二进制搜索
我正在努力将 Perl 程序移植到 Java,并在学习过程中学习 Java。原始程序的一个核心组件是一个Perl 模块,它使用二进制搜索在 +500 GB 排序的文本文件中进行字符串前缀查找(本质上,“寻找”到文件中间的字节偏移量,回溯到最近的换行符,比较带有搜索字符串的行前缀,“寻找”到该字节偏移量的一半/两倍,重复直到找到......)
我已经尝试了几种数据库解决方案,但发现在这种大小的数据集的绝对查找速度上没有什么比这更好的了。您知道任何现有的实现此类功能的 Java 库吗?如果做不到这一点,您能否指出一些在文本文件中进行随机访问读取的惯用示例代码?
或者,我不熟悉新的(?)Java I/O 库,但它是否可以选择对 500 GB 文本文件进行内存映射(我在 64 位机器上,有可用内存)并执行二进制搜索内存映射的字节数组?我很想听听您分享有关此问题和类似问题的任何经验。
java - 如何确定文件是逻辑移动还是物理移动
事实:
移动文件时,有两种可能性:
- 源文件和目标文件在同一个分区,只更新文件系统索引
- 源和目标位于两个不同的文件系统上,文件需要逐字节移动。(又名移动复制)
问题:
如何确定文件是逻辑移动还是物理移动?
我正在传输大文件(700 多兆),并且会针对每种情况采取不同的行为。
编辑:
我已经编写了一个带有工作线程的移动文件对话框,该线程执行阻塞 io 调用以一次复制文件一个兆。它向用户提供信息,例如粗略估计剩余时间和传输速率。
问题是:在尝试物理移动文件之前,我如何知道文件是否可以在逻辑上移动?