草庐IT

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

java - 尝试写入文件夹时出现 "java.nio.file.AccessDeniedException"

由于某种原因,每次尝试使用Tomcat上的javawebapp写入计算机上的文件夹时,我都会不断收到java.nio.file.AccessDeniedException。此文件夹的权限设置为对我计算机上的每个人(Windows)进行完全控制。有人知道我为什么会得到这个异常吗?这是我的代码:publicvoidsaveDocument(Stringname,StringsiteID,bytedoc[]){try{Pathpath=Paths.get(rootDirectory+siteID);if(Files.exists(path)){System.out.println("Exis

Java:NIO 和 NIO.2 到底有什么区别?

我不太明白它们之间有什么不同,所以我对这两个包有一些疑问。在Google上浏览了一下之后,似乎Oracle决定使用更新和增强的NIO.2包来更新NIO包,作为JDK7版本的一部分.NIO包的性能与NIO.2包相比如何?从NIO到NIO.2有哪些重大变化?(例如新方法、新功能)为什么要更新原来的NIO包?现在NIO.2只是NIO包的同义词吗?我并不是想在我的代码中使用legacy包,我只是对此很好奇。请告诉我他们的区别? 最佳答案 Java最初是通过在java.io包中提供File类来访问文件系统。该对象代表一个文件/目录,并允许您执