问题标签 [nio2]

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.

0 投票
0 回答
528 浏览

java - Counterintuinive AsynchronousSocketChannel behaviour

Look at the following test:

On Windows java 1.7.0_05 it prints:

The questions are:

  1. why does the first conn1.connect(addr) not fail, although the server port is not bound yet?
  2. why does the first assch.accept() not accept the already pending client connection?

I've read JDK's javadoc and could not find answers.

0 投票
1 回答
141 浏览

java - nio2 和文件属性

刚刚下载并安装了 NetBeans NetBeans IDE 7.2(Build 201207171143);Java:1.7.0_03;Java HotSpot(TM) 客户端 VM 22.1-b02。这不是 Eclipse 与 JDK 6/ 的主要原因是因为我正在开始一个新项目,这将不得不访问文件和属性(备份实用程序,包括清除存档标志 - 任何人都可以分享经验吗?)。但是,安装无法识别 java.nio.file.attribute,并设置错误。任何想法?

0 投票
2 回答
15079 浏览

java - 为什么 java 7 中没有 Files.readAllLines(String path)?

我正在尝试学习nio 2Java 7 中的包,但我偶然发现了该Files.readAllLines(Path p, Charset cs)方法。我觉得它非常有用,但我认为应该有一个没有cs参数的版本,就像:

我确信大多数时候无论如何都会使用默认字符集调用该方法,所以为什么没有快捷方式。关于字符集我有什么遗漏可以证明没有这种方法是合理的吗?我很惊讶,因为 Scala 有这个选项:

所以我不明白为什么Java不应该。有什么看法吗?

0 投票
2 回答
170 浏览

java - Java nio2:在文件系统之间映射 Path 对象而不依赖于 toString

我正在使用 NIO2 从源目录的内容创建一个 zip 文件。我正在使用ZipFileSystem,为此我首先必须获得一个实例,然后生成路径。然后可以使用生成的路径在 zip 文件中使用Files.createDirectory(pathInZip)或创建条目Files.copy(sourcePath, destPathInZip)。这很好用,但是我想避免一些丑陋的时刻:

有没有办法将路径从一个 FileSystemProvider 复制到另一个路径而不依赖于aPath.toString()?看起来很丑。我总是可以遍历一条路径,逐步构建另一条路径……但是拥有一个 FileSystem.getPath(Path anotherPath) 似乎很容易,以至于我花时间写这篇文章。

0 投票
3 回答
4215 浏览

java - 如何在 Java 1.7 中将文件路径转换为有效的文件路径

使用 Java 1.6 用户可以输入文件路径,然后我应用各种正则表达式来删除对平台无效的字符(例如“?”在 Windows 上无效),并检查路径长度以确保我们最终得到有效的文件路径在尝试创建文件路径之前为操作系统。

但是有两个问题:

  1. 弄清楚每个平台的有效或无效是一件很痛苦的事情。
  2. 我基于平台的默认文件系统做出假设,但当然 OSX 系统可能正在写入非 mac 文件系统,如 FAT32,在这种情况下,这些检查将无效。

所以我希望在 Java 7 中使用 NIO2 会有更好的方法,但还没有找到解决方案,有吗?

0 投票
2 回答
2727 浏览

java - Java NIO2 AsynchronousSocketChannel/AsynchronousServerSocketChannel 和 TLS/SSL

NIO2 上可用的 INTERNET 上的所有源/样本都没有 TLS/SSL 支持,

java.nio.channels.AsynchronousSocketChannel java.nio.channels.AsynchronousServerSocketChannel

据我了解,连接的 SSLEngine 生命周期与 AsynchronousSocketChannel.connect && AsynchronousServerSocketChanne.accept 不同,TLS/SSL 应该封装在 AIO 实现中,那么我该如何同时使用它们......?注意:我在 Grizzly 项目中的一个视频中谈论他们已经实现了它,我查看了源代码,但我看到了 AIO,但没有看到 TLS/SSL 集成......

提前致谢!

0 投票
1 回答
2574 浏览

java - 使用 Java WatchService 监视文件夹中的文件夹

我正在尝试使用 Java 7 的 WatchService 来监控文件夹。我希望它监视添加到使用 WatchService 注册的路径的任何文件或文件夹。

如果我将一个文件夹添加到注册路径,它会正确地将其检测为 ENTRY_CREATE 并在 watchEvent.context() 中返回该文件夹的名称。但是,如果我将一个文件夹添加到该文件夹​​而不是再次检测到它,但 watchEvent.context() 返回相同的文件夹和 ENTRY_MODIFY,因为该文件夹已通过添加另一个文件夹进行了修改。

所以我理解这一点,但不知道我是否应该注册结构中的每个文件夹,或者只注册顶级文件夹并监听或创建和修改

0 投票
4 回答
2650 浏览

java - Java7 nio2 的任何可用内存中文件系统实现?

我一直在寻找内存中的 nio2 FileSystem 实现,这将使我能够更轻松地测试我的 IO 相关代码。

看起来,Java 只提供(在我的 JDK 中) aWin32FileSystem和 a ZipFileSystem

ShrinkWrap似乎有类似的东西,但似乎主要处理 ZIP 文件系统或其他任何东西。

我猜目前,你们中的一些人已经将新的 nio FileSystem IO 合并到自己的项目中,可以帮助我吗?

谢谢

0 投票
2 回答
2064 浏览

java - 异步 NIO:同一客户端向服务器发送多条消息

关于Java NIO2。

假设我们有以下内容来监听客户端请求......

此代码将接受一个客户端连接处理它,然后接受另一个。为了与服务器通信,客户端打开一个 AsyncSocketChannel 并触发消息。然后调用完成处理程序 completed() 方法。

但是,这意味着如果客户端想要在同一个 AsyncSocket 实例上发送另一条消息,它就不能。

它必须创建另一个 AsycnSocket 实例——我相信这意味着另一个 TCP 连接——这会影响性能。

任何想法如何解决这个问题?

或者以另一种方式提出问题,任何想法如何使相同的 asyncSocketChannel 接收多个 CompleteionHandler completed() 事件?

编辑:我的处理代码是这样的......

这就是我的服务器从异步通道读取消息并返回答案。客户端阻塞,直到它得到答案。但这没关系。我不在乎客户端是否阻塞。

完成后,客户端尝试在同一异步通道上发送另一条消息,但它不起作用。

0 投票
1 回答
820 浏览

java - 复制大量文件时,JDK 7 Watchkey pollEvents 未捕获 ENTRY_CREATE 或 ENTRY_MODIFY

我正在尝试查看对特定文件夹所做的所有修改。当我复制一个包含 2~5 个子文件夹的文件夹时,每个子文件夹有 2~3 个文件。一切都很好。

当我复制复杂的文件夹结构时会出现问题。例如,当我复制任何示例 Web 应用程序文件夹(仅用于测试目的)时,其中 WEB-INF 文件夹在 classes 文件夹中有大量源文件和子文件夹,在 lib 文件夹中有大量 jar 等等。

许多文件的“ENTRY_CREATE”和“ENTRY_MODIFY”的许多文件事件都被遗漏了。

NIO2 Watcher API 不可靠吗?

我使用 Oracle 网站中记录的以下代码段。

这就是我捕获事件的方式:代码正是这里的代码 - http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com /javase/tutorial/essential/io/examples/WatchDir.java

我复制了 30 个文件夹中的大约 500 个文件,理想情况下,必须通知 ENTRY_CREATE 和 ENTRY_MODIFY 以获取尽可能多的文件和文件夹。但是捕获的最大事件(ENTRY_CREATE 和 ENTRY_MODIFY 组合在一起)不会超过 280,而对于复制的 530 个文件和文件夹,仅应注册至少 530 个 ENTRY_CREATE 事件。

有什么我遗漏或必须添加到 oracle.com 的观看代码中的吗?对此的任何建议都将受到高度赞赏。