问题标签 [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 投票
1 回答
4944 浏览

java - 为什么 Java 7 Files.walkFileTree 在远程驱动器上遇到 tar 文件时抛出异常

Files.WalkFileTree()用来导航文件夹和计算音频文件,但是当它遇到一个 tar 文件时出现问题,它似乎将它视为一个实际的文件夹,我希望它只是跳过它。

我看不到任何可以让我控制此行为的选项

代码:

给出了这个堆栈跟踪

但那是一个远程驱动器(nas 驱动器),我在本地驱动器上没有这样的错误

编辑 根据我认为有效的以下答案实施了以下

但是我的测试有问题,它实际上不起作用,因为 FileTreeWalker 中失败的代码在 previsit 方法之前被调用

0 投票
2 回答
410 浏览

java - Java 的 NIO2 API 是否可以替代使用 NIO 编写单线程多路复用服务器?

我正在学习如何使用NIO写一个泥(我不排除高级库,但我也想学习低级操作)。

在我的阅读中,我了解了 NIO2。因为我已经在这个项目中使用了 Java 7,所以我想知道我用来编写单线程多路复用服务器的 NIO 操作是否不会在 NIO2 中被替换——也就是说,可能会变得更简单。据我所知,NIO2 的相关部分是它的异步类。但是,我没有足够的经验来知道这些是必要的还是只是我不一定需要的不同/新的抽象来代替基本的多路复用器。

0 投票
1 回答
10370 浏览

java - 如何在 Java 7 中用 nio 替换 File.listFiles(FileFilter filter)?

我有一些用 Java 6 编写的文件 I/0 遍历代码,试图将其移动到 Java 7 中的新 I/O,但我找不到任何替代这种东西的方法。

也就是说,没有办法只过滤文​​件的路径,它返回文件列表,所以如果我想限制在它调用的方法中使用 File,我必须将每个文件转换为路径(file.toPath),这似乎相当费力.

我确实看过 FileVisitor 但这似乎不允许您控制树的遍历方式,所以我认为它对我有用。

那么 Java 7 中的 Path for File 有多少替代品呢?

0 投票
1 回答
1231 浏览

file - 如何在 Files.walkFileTree 期间防止 AccessDeniedException?

我正在尝试使用 Java 1.7 nio。当我打电话

Files.walkFileTree(source[i], tc);

其中 source[i] 是我的 Windows 文件系统上的任何文件夹,而 tc 是 SimpleFileVisitor,我得到一个 java.nio.file.AccessDeniedException。我检查了文件夹和文件夹内容,并确保所有用户都允许读取、写入和执行。

我可以使用 File 很好地访问该文件。为什么 walkFileTree 访问文件有问题?

0 投票
2 回答
2738 浏览

java - NIO2:如何将 URI 映射到路径?

我试图找到一种简单的方法来将 a 映射URI到 aPath而无需编写特定于任何特定文件系统的代码。以下似乎可行,但需要有问题的技术:

在几个示例上运行此代码会产生以下结果:

请注意URIs 是如何映射到Path已“植根”到正确类型的对象上的FileSystem,例如引用 jar 中目录“/org/foo”的路径。

这段代码让我困扰的是,尽管 NIO2 很容易:

  • 将 URI 映射到现有文件系统中的路径: Paths.get(URI)
  • 将 URI 映射到 FileSystem实例: FileSystems.newFileSystem(uri, env)

...没有很好的方法将 URI 映射到 FileSystem实例中的路径。

我能找到的最好的方法是,在创建文件系统之后,我可以要求它FileSystemProvider给我路径:

但这似乎是错误的,因为不能保证它会返回一个绑定到我刚刚实例化的文件系统的路径(即,path.getFileSystem() == fs)。它非常依赖 FileSystemProvider 的内部状态来知道我指的是什么 FileSystem 实例。没有更好的办法吗?

0 投票
0 回答
172 浏览

linux - JDK 7 如何在 Linux 上实现 NIO2?

我知道 JDK 7 在 Windows 上使用 IOCP 实现了 NIO2,但是 Linux 呢?

尽管 Linux 从 2.6 开始就有 AIO,但它只对文件有用。网络部分呢?

0 投票
2 回答
1382 浏览

java - Java 7 的 nio.file 包在创建新文件时非常慢

我正在尝试从 java 程序创建 300M 文件,我从旧文件 API 切换到新的 java 7 nio 包,但新包的运行速度比旧包还要慢。

我发现 CPU 使用率比使用旧文件 API 时要少,但我正在运行这个简单的代码,我得到 0.5Mbytes/sec 的文件传输速率,并且来自 java 的写入正在读取一个磁盘并写入另一个(写入是访问磁盘的唯一进程)。

有没有希望在这里获得合理的吞吐量?


更新:

我正在从大文件中解压缩 3 亿个 5-10k 字节的图像文件。我有 3 个磁盘,1 个本地磁盘和 2 个 SAN 连接(大文件的典型吞吐率约为 20MB/秒)。

我还尝试了这段代码,它将速度提高到几乎不低于 2MB/秒的吞吐量(解压这些文件需要 9 天)。

我从本地磁盘读取并写入 SAN 附加磁盘。我正在读取 Hadoop SequenceFile 格式,hadoop 通常能够使用基本相同的代码以 20MB/秒的速度读取这些文件。

除了超级慢之外,唯一看起来不合适的是,我看到读取 IO 比写入 IO 多大约 2:1,尽管序列文件是 gzip 压缩的(尽管图像实际上得到了 1:1 的比例),所以压缩文件应该是大约。1:1 与输出。


第二次更新

看着iostat我看到一些奇数,我们在这里查看 xvdf,我有一个 java 进程读取xvdb和写入,xvdf并且没有其他进程处于活动状态xvdf

读取xvdf是写入的 10 倍,这令人难以置信。

0 投票
8 回答
140634 浏览

java - 类路径资源的 java.nio.file.Path

是否有一个 API 可以将类路径资源(例如我从中得到的Class.getResource(String))作为java.nio.file.Path? 理想情况下,我想将花哨的新PathAPI 与类路径资源一起使用。

0 投票
1 回答
354 浏览

java - 带有 NIO2 的 Java 异步 I/O:AsynchronousServerSocketChannel.accept 是否为您提供了一个活动的 AsynchronousSocketChannel

对于 server.accept,我编写了一个包含参数的完成处理程序。

当通过 accept 方法调用处理程序时,这是否意味着 AsynchronousSocketChannel 现在已连接?

还是我必须调用 AsynchronousSocketChannel.connect 方法?

现在我认为正在发生的是 AsynchronousServerSocketChannel.accept 接受一个连接(并将其存储在 AsynchronousSocketChannel 参数中),并且 AsynchronousSocketChannel.connect 还启动了从服务器到客户端的连接(存储在套接字通道中)。

我在正确的轨道上吗?

0 投票
2 回答
698 浏览

java - 定期检查,文件是否存在

如果我想检查文件是否存在,我将使用:

但是我该怎么办,如果我想用它来检查安装:文件可以在 5 或 10 分钟后创建:那么如何file.exists()控制文件是否存在?

例如

  • 安装开始,文件不存在
  • 安装继续 5 分钟文件仍然不存在
  • 10 分钟后 - 创建文件 - 例如Installation.chk(文件已存在)我的 if 语句现在为真

是否可以在 Java 中创建它?如果是,如何?