问题标签 [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.
scala - 如何在 Scala 中实例化 Java 7 完成处理程序
我在玩 scala(新手),我正在尝试使用 Java 7 NIO(因为我喜欢轻松开始)。但我不知道如何为接受实例化CompletionHandler。以下代码是错误的,我无法修复它:
java - 为什么 Java 的 NIO.2 中的异步通道需要这些暂停?
我写了最小的例子,但它仍然太长,所以让我知道我应该发布到 Pastebin 的链接。
服务器:
客户:
要运行的样板:
所以,如果我有这样的代码,它会给我以下输出:
但是,如果我删除那些sleep()
s in Srv.runInstance()
,我会得到:
那么,这是否意味着客户端连接到服务器,但服务器拒绝?我不清楚这里发生了什么,文档也很差,所以我不知道在哪里寻找解决方案。
java - 将 Java UserPrincipal 映射到 Active Directory 用户
我正在使用 Java 访问远程服务器。该服务器运行 Microsoft Windows 并提供 Active Directory 以及文件系统共享。我通过 JNDI 从 Active Directory 中读取用户和组,效果很好。我得到了所有的用户属性,比如distinguishedName
,objectSid
等等。
我的 Java 程序还使用 Java 7 和 NIO.2 连接到同一服务器上的 Windows 共享。我可以读取远程文件系统并获取有关它的信息。我还可以像这样读取文件权限设置:
这样我就获得了UserPrincipal
对象的访问权限。这个类只提供了一个getName()
返回一些名字或者有时是一个 SID 的方法。
对于实际用户,该UserPrincipal
对象返回一个 SID,我可以使用它在 Active Directory 中查找相应的用户。但是,如果UserPrincipal
代表一个组,getName()
则只返回一个文本,例如"VORDEFINIERT\Administratoren"
。
我找不到将此文本映射到 Active Directory 中定义的组的方法。AD 中对应的组有这个distinguishedName
属性:CN=Administratoren,CN=Builtin,DC=mydomain,DC=com
.
运行 Java 程序的机器和服务器都运行德文版的 Windows。奇怪的是 AD 返回CN=Builtin
(English) 但文件系统返回一个带有德语翻译的组名VORDEFINIERT
。如果两者都是,例如Builtin
,我可能会解析UserPrincipal
并找出distinguishedName
AD 对象应该是什么......但是,这种方法似乎不是很可靠。
我真的很想能够读取所有UserPrincipal
对象的 SID,以便我可以在 AD 中找到相应的用户或组。
有没有办法做到这一点?如果您需要更多信息,请告诉我。
最好的问候,天空
io - How can AsynchronousFileChannel read large file?
In this way, I can read the first 1000 byte from large.log. How can I read following log If I don't want to allocate bigger byte array like ByteBuffer.allocate(1000*1000). Because I think this will lead to OutOfMemory.
Could someone give me the sample code? Thanks.
ps:I can loop read the large file with JIO because I can check the return value of java.io.BufferedReader.read(). But I don't know how to do with NIO2.
java - Java NIO2:需要澄清 FileChannel
我正在尝试构建一个 custom FileChannel
,但由于文档不一致,我遇到了不清楚的问题。
该FileChannel.transferFrom(ReadableByteChannel src, long position, long count)
方法的文档说,
如果给定位置大于文件的当前大小,则不传输任何字节。
现在,他们不应该这样说吗?:
“如果
position + count
大于文件的当前大小,则不传输任何字节。”
我怀疑这可能是文档中的错误的原因是这个。在同一个 API 文档的其他地方,如果文件需要增长,则会明确提及它,例如FileChannel.write(ByteBuffer src, long position)
:
“如果给定的位置大于文件的当前大小,那么文件将被增长以容纳新的字节;”
因此,如果在 的情况下没有提到任何文件增长FileChannel.transferFrom()
,我会觉得文件不应该通过这种方法增长。但问题是,文件不仅可以增长“如果给定位置大于文件的当前大小”,还可以“如果position + count
大于文件的当前大小”。
java - 这是 Java 7 中的一个错误吗?
我不知道在哪里寻求关于 Java API 文档和 Java 代码的澄清和确认,所以我在这里做。
在 API 文档中FileChannel
,我发现要归档position
并归档size
在多个位置的错误。
这里只是一个例子。状态的 API 文档transferFrom(...)
:
“如果给定位置大于文件的当前大小,则不传输任何字节。”
我确认 OpenJDK 代码也包含此代码...
...在FileChannelImpl.java
与文档一致的文件中。
现在,虽然上面的代码片段和 API 文档看起来相互一致,但我“感觉”上面应该“大于或等于”而不仅仅是“大于”,因为position
它是文件数据的基于 0 的索引,随意读取position == size()
没有数据返回给调用者!(在position == size() - 1
处,至少 1 个字节——文件的最后一个字节——可以返回给调用者。)
以下是同一 API 文档页面中的其他一些类似实例:
position(...)
: "将位置设置为大于文件当前大小的值是合法的,但不会改变文件的大小。" (应该是“大于或等于”。)transferTo(...)
: "如果给定位置大于文件的当前大小,则不传输任何字节。" (应该是“大于或等于”。)read(...)
:“如果给定位置大于文件的当前大小,则不读取任何字节。” (应该是“大于或等于”。)
最后,返回值的文档部分read(...)
甚至无法与文档的其余部分保持一致。这是它所说的:
回报:
读取的字节数,可能为零,如果给定位置大于或等于文件的当前大小,则为 -1
所以,在这个单独的例子中,我确实看到他们提到了正确的事情。
总的来说,我不知道该怎么做。如果我今天编写与此文档匹配的代码,那么 Java 中的未来错误修复(代码或文档)将使我的代码出现错误,也需要我的修复。如果我今天自己按照今天的情况做正确的事情,那么我的代码一开始就会出错!
java - 是否可以出于任何原因为每个路径注册两个 WatchKey?
我无法在一个小示例中重现该问题,但是如果 WatchService 和s 相同,是否可以WatchKeys
为一个注册两个不同的?Path
Kind<?>
例如,如果父目录内容发生变化?
java - 使用常见 OpenOption 组合的最快方法
是否有一种简洁、惯用的方式(可能使用 Apache Commons)来指定 OpenOption 的常见组合,例如StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING
java-7 - Java 7 walkFileTree calling visitFile on directories
Say I have the following directory structure
And let's say I'll be using the following visitor:
If we use the simple overload of walkFileTree:
Everything goes according to plan and we see the following output:
But when we try setting the max depth, things start to break down:
Output:
I'm pretty sure this is a bug, but I wanted to ask the community first: Is there something I'm missing and this is actually expected behavior? Thanks for confirming!
Details:
java - 你如何干净地关闭 AsynchronousSocketChannel?
我的服务器使用AsynchronousServerSocketChannel
. 监听客户端连接CompletionHandler
。当一个客户端连接被接受时,它AsynchronousSocketChannel
被读取,再次使用 aCompletionHandler
来接收没有超时的数据。
到目前为止一切顺利,我的客户端连接,写入服务器读取的数据,服务器能够响应通过同一个套接字将数据发送回客户端。
当我的客户端终止时,它会调用AsynchronousSocketChannel.close()
, 来关闭套接字。当进行此调用时,服务器正在等待从套接字读取数据。
我曾期望AsynchronousSocketChannel.close()
客户端上的调用转换为服务器上CompletionHandler.completed
读取长度为的回调-1
,表明套接字已关闭,但是回调是CompletionHandler.failed
有以下异常的:
客户端应该如何关闭一个套接字,以便它在服务器上不被视为错误?