草庐IT

java.io.File 与 java.nio.Files 哪个是新代码中的首选?

在围绕SO编写答案时,一位用户试图指出java.io.File不应在新代码中使用,相反他认为new对象java.nio.Files应该被使用;他链接到thisarticle.现在我已经用Java开发了好几年了,以前没有听说过这种说法;自从阅读了他的帖子以来,我一直在搜索,并没有找到很多其他来源可以证实这一点,而且就个人而言,我觉得文章中争论的许多观点都很薄弱,如果你知道如何阅读它们,错误引发的错误File类通常会准确地告诉您问题所在。随着我不断开发新代码,我的问题是:这是Java社区中的一个活跃论点吗?是Files优于File新代码?两者之间的主要优点/缺点是什么?

java - 与 Java 中的传统 IO 相比,NIO 性能提升

我看到很多文章/博客说JavaNIO比传统JavaIO更好。但今天我的一位同事向我展示了这个博客http://mailinator.blogspot.com/2008/02/kill-myth-please-nio-is-not-faster-than.html.我想知道Java社区中是否有人做过这种与JavaNIO性能相关的基准测试。 最佳答案 NIOvsIO是一个非常有趣的话题。根据我的经验,这两者是针对两种不同工作的两种不同工具。我听说IO被称为“每个客户端线程”方法,而NIO被称为“所有客户端一个线程”方法,我发现这些名称虽

java - Java NIO 在阻塞模式下相对于传统 I/O 的优势?

我几乎已经决定不使用异步、非阻塞的JavaNIO。总体而言,复杂性与yield之间的关系非常值得怀疑,我认为特别是在这个项目中不值得。但是我读到的关于NIO的大部分内容,以及与旧java.io.*的比较都集中在非阻塞、异步NIO与使用java.io.*的每个连接线程同步I/O上。但是,NIO可以用于同步、阻塞、每个连接线程的模式,这似乎很少讨论。问题来了:同步阻塞NIO与传统同步阻塞I/O(java.io.*)相比有什么性能优势吗?两者都是每个连接的线程。复杂度如何比较?请注意,这是一个一般性问题,但目前我主要关注TCP套接字通信。 最佳答案

Java Non-Blocking and Asynchronous IO with NIO & NIO.2 (JSR203) - Reactor/Proactor 实现

所以我在这里阅读我最喜欢的软件模式书籍之一(面向模式的软件架构-并发和网络对象的模式),特别是关于Proactor/Reactor异步IO模式的部分。我可以看到通过使用可选channel,我可以很容易地实现Reactor风格的异步IO机制(并且已经这样做了)。但是,我看不到如何使用非阻塞写入实现适当的Proactor机制。这是利用操作系统管理的非阻塞写功能。操作系统特定调用支持的功能,如GetQueuedCompletionStatuswin32下。我确实看到Java7使用异步完成处理程序为NIO带来了一些更新(这似乎是正确的方向)。话虽这么说...鉴于缺乏对操作系统管理的异步操作(特

用于 URL 的 java.nio.file.Path?

Java7附带一个默认的Path本地文件的实现。是否有用于URL的路径实现?例如,我应该能够使用以下代码复制远程资源:Pathremote=Paths.get(newURI("http://www.example.com/foo/bar.html"));Pathlocal=Paths.get(newURI("/bar.html"));Files.copy(remote,local);目前,这会抛出java.nio.file.FileSystemNotFoundException:Provider"http"notinstalled。我可能可以自己实现这个,但我不想重新发明轮子。

java - Java NIO 中 File.deleteOnExit() 的替代方案?

JavaIO有File.deleteOnExit(),这是一种删除在JVM正常终止期间调用的文件的方法。我发现这对于清理临时文件非常有用,尤其是在单元测试期间。但是,我在JavaNIO的Files中没有看到同名的方法。类(class)。我知道我可以执行path.toFile().deleteOnExit(),但我想知道是否有使用NIO的替代方法。还有其他选择吗?如果没有,为什么没有? 最佳答案 简答JavaNIO中不能删除任意文件,但可以使用StandardOpenOption.DELETE_ON_CLOSE当打开一个新流时,一旦流

java - 使用 nio.file.DirectoryStream 递归列出目录中的所有文件;

我想列出指定目录中的所有文件以及该目录中的子目录。不应列出任何目录。我当前的代码如下。它不能正常工作,因为它只列出指定目录中的文件和目录。我该如何解决这个问题?finalListfiles=newArrayList();Pathpath=Paths.get("C:\\Users\\Danny\\Documents\\workspace\\Test\\bin\\SomeFiles");try{DirectoryStreamstream;stream=Files.newDirectoryStream(path);for(Pathentry:stream){files.add(entry);

java - 当 io 包已经有方法可用时,java nio 包的确切用途是什么

我正在学习javanio包,我意识到File已经提供了很多方法,nio.Files通过使用Path类再次提供了这些方法。就像我得到的那样。我实际上并没有得到nio包的实际用途。我对这个包很陌生,所以我的问题可能是错误的,但一点帮助可以帮助我进一步阅读。 最佳答案 IO和NIO的主要区别在于IO是阻塞的,而NIO是非阻塞的。Thisarticle解释了包的区别以及阻塞和非阻塞IO是什么。archived 关于java-当io包已经有方法可用时,javanio包的确切用途是什么,我们在Sta

每个连接模型的 Java 线程与 NIO

非阻塞JavaNIO是否仍然比每个连接异步套接字的标准线程慢?此外,如果您要为每个连接使用线程,您会创建新线程还是使用非常大的线程池?我正在用Java编写一个MMORPG服务器,它应该能够在足够强大的硬件条件下轻松扩展10000个客户端,尽管客户端的最大数量是24000(我认为每个连接模型的线程不可能达到,因为Java中的15000个线程限制)。从一篇三年前的文章中,我听说每个连接模型使用一个线程阻塞IO仍然比NIO快25%(即这篇文档http://www.mailinator.com/tymaPaulMultithreaded.pdf),但是今天还能达到同样的效果吗?从那时起,Jav

jar 中的 Java 访问文件导致 java.nio.file.FileSystemNotFoundException

在尝试使用我的java应用程序将我的jar文件中的一些文件复制到临时目录时,抛出以下异常:java.nio.file.FileSystemNotFoundExceptionatcom.sun.nio.zipfs.ZipFileSystemProvider.getFileSystem(ZipFileSystemProvider.java:171)atcom.sun.nio.zipfs.ZipFileSystemProvider.getPath(ZipFileSystemProvider.java:157)atjava.nio.file.Paths.get(UnknownSource)at