Tag: nio

Java NIO连接到套接字

我正在尝试连接到远程服务器并在我的线程中发送登录消息: @Override public void run() { try { address = new InetSocketAddress(host, port); incomingMessageSelector = Selector.open(); socketChannel = SocketChannel.open(); socketChannel.configureBlocking(false); socketChannel.connect(address); socketChannel.register(incomingMessageSelector, SelectionKey.OP_READ); serverManager.loginToServer(); } } loginServer()是一个向服务器发送消息的方法,但我不断得到: java.nio.channels.NotYetConnectedException 如何在发送此loginServer()方法之前检查并等待连接?

使用NIO SocketChannel连接到套接字超时

我们有一个类通过套接字与另一个HOST对话,它看起来像这样: SocketChannel sc = SocketChannel.open(new InetSocketAddress(HOST, PORT)); sc.configureBlocking(true); … sc.write(…) sc.read(…) 这个类很有效,除非HOST已关闭,然后SocketChannel.open永远阻塞。 我尝试通过执行以下操作来实现此超时: SocketChannel = SocketChannel.open(); sc.configureBlocking(false); boolean result = socketChannel.connect(new InetSocketAddress(HOST, PORT)); if (!result) { long startTime = System.currentTimeMillis(); while (!socketChannel.finishConnect()) { if (System.currentTimeMillis() – startTime< 1000) { // keep trying Thread.sleep(100); } else { // FAILED! enabled = false; return; } } } […]

内存映射文件java NIO

我理解如何创建一个内存映射文件,但我的问题是让我们说在以下行: FileChannel roChannel = new RandomAccessFile(file, “r”).getChannel(); ByteBuffer roBuf = roChannel.map(FileChannel.MapMode.READ_ONLY, 0, SIZE); 例如,我将SIZE设置为2MB,这是否意味着它只会加载2MB的文件,或者它会在文件中进一步读取并更新缓冲区,因为我从中消耗了字节数?

如何使用CompletionHandlers和小于请求的ByteBuffer读取请求?

我使用的是Java 7和AsynchronousSocketChannel 。 我想阅读一个请求(例如HTTP POST )但是我很难想出一个很好的解决方案来读取完整的请求,如果它大于我正在使用的ByteBuffer的大小。 例如,如果ByteBuffer是4048字节,并且HTTP POST包含大于4kB的图像。 这有什么好的递归解决方案或循环吗? 这是我的阅读请求代码: public void readRequest(final AsynchronousSocketChannel ch) { final ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE); final StringBuilder strBuilder = new StringBuilder(); final CharsetDecoder decoder = Charset.forName(“US-ASCII”).newDecoder(); ch.read(buffer, null, new CompletionHandler() { public void completed(Integer bytes, Void att) { buffer.flip(); try { decoder.reset(); strBuilder.append(decoder.decode(buffer).toString()); } catch (CharacterCodingException e) { e.printStackTrace(); […]

在Play Framework中使用Files.createSymbolicLink获取FileSystemException“客户端不拥有所需的权限”

我正在尝试在Play中使用新的Java 7 Files.createSymbolicLink()方法! 框架,我得到以下exception: RuntimeException occured : java.nio.file.FileSystemException: c:\work\foo\bar: A required privilege is not held by the client. 这是我第一次遇到Java的权限模型,所以我理解发生了什么,但还不知道如何修复它(我想给控制器更多权限)。 如果有人能够比我找到答案更快地回答这里,我(以及未来的读者)将不胜感激。

Java nio FileSystem Watcher锁定目录。 删除变得不可能

我正在使用Java7的新function来查看更改目录(如以下教程中所述: http : //download.oracle.com/javase/tutorial/essential/io/notification.html ) 观看本身(几乎)没有问题。 或多或少我有两个问题,我希望你们中的一些人知道如何处理它。 添加一个文件夹进行监视后,VM可以访问它并且不会释放它。 这应该不是一个大问题。 但是,如果您正在另一个目录中创建一个目录,那么还有一个目录。 (例如,您在目录c:\tmp\a中创建目录b ,在b中创建目录c ( c:\tmp\a\b\c ))无法删除目录a ,因为访问了VM到b和c 。 如果要删除所有文件夹(例如,使用Windows资源管理器),则必须首先删除c ,然后删除c ,然后删除a 。 这很奇怪,但这种方式有效(虽然不方便) 这个问题似乎是第一个问题的结果。 如果有时发生了很多变化(或多或少)我得到一个exception,告诉我,新创建的文件夹被另一个进程使用,并且无法访问它。 这很奇怪,因为我认为收到通知无关紧要。 并且因为在完全抛出此exception时并不完全清楚。 您是否知道如何使锁定或者至少让用户能够以经典方便的方式删除这样的目录结构?

使用Java nio创建子目录和文件

我正在创建一个简单的程序,它将尝试从磁盘读取“conf / conf.xml”,但如果此文件或目录不存在,则会创建它们。 我可以使用以下代码执行此操作: // create subdirectory path Path confDir = Paths.get(“./conf”); // create file-in-subdirectory path Path confFile = Paths.get(“./conf/conf.xml”); // if the sub-directory doesn’t exist then create it if (Files.notExists(confDir)) { try { Files.createDirectory(confDir); } catch (Exception e ) { e.printStackTrace(); } } // if the file doesn’t exist then create it if (Files.notExists(confFile)) […]

java nio逐行读取

我需要使用java nio逐行读取文件 必须阅读第一行,并且必须进行一些处理 但是nio没有像readline()这样的方法来读取一行 请提供示例代码

深度复制Java的ByteBuffer复制()

java.nio.ByteBuffer#duplicate()返回一个新的字节缓冲区,它共享旧缓冲区的内容。 旧缓冲区内容的更改将在新缓冲区中可见,反之亦然。 如果我想要字节缓冲区的深层副本怎么办?

比较直接和非直接ByteBuffer get / put操作

从直接bytebuffer获取/放置非直接bytebuffer比获取/放入更快吗? 如果我必须从直接bytebuffer读/写,最好先读/写一个线程本地字节数组,然后用字节数组更新(写入)直接bytebuffer?