Tag: nio

Java NIO。 SocketChannel.read方法一直返回0.为什么?

我试着了解java NIO是如何工作的。 特别是SocketChannel如何工作。 我写下面的代码: import java.io.*; import java.net.*; import java.nio.*; import java.nio.channels.*; public class Test { public static void main(String[] args) throws IOException { SocketChannel socketChannel = SocketChannel.open(); socketChannel.configureBlocking(false); socketChannel.connect(new InetSocketAddress(“google.com”, 80)); while (!socketChannel.finishConnect()) { // wait, or do something else… } String newData = “Some String…”; ByteBuffer buf = ByteBuffer.allocate(48); buf.clear(); buf.put(newData.getBytes()); buf.flip(); while […]

如何检测NIO通道上的连接错误

我有一种情况,我有多个连接到多个服务器,我希望使用NIO。 选择器将告诉我何时有数据要读取。 有没有办法知道什么时候连接不再连接? 也许当写入失败或捕获某些操作引发的exception时? 我需要这是非阻塞的,并且我想以一种方式执行此操作,以便在连接失败时可以重新建立Channel(即建立到同一服务器的新通道)。

如何在NIO.2中实现多播客户端?

使用Java 7 NIO.2多播客户端的示例如何? 我只能在MulticastChannel文档中找到一半示例。

我可以使用FileChannel独立地从不同的线程中查找文件吗?

我创建了一个适用于FLV文件的Web应用程序。 此应用程序使用我创建的库来解析flv文件中的内容。 该库使用FileChannel来搜索文件。 我现在遇到一种奇怪的行为,因为我从不同的线程中寻找相同的flv文件。 假设Thread_1和Thread_2都在同时寻找movie.flv (我的问题在示例之后)。 Thread_1 // Thread_1 moves to position 200 to read something FileChannel chan1 = new FileInputStream(“movie.flv”).getFileChannel(); chan1.position(200); Thread_2 (在Thread_1之后执行) // Thread_2 moves to position 600 to read something else FileChannel chan2 = new FileInputStream(“movie.flv”).getFileChannel(); chan2.position(600); 最后Thread_1做了: ByteBuffer bb = ByteBuffer.allocate(40); chan1.read(bb); Thread_1是从位置200还是从位置600读取40个字节? 更准确地说, chan1和chan2是否独立(=可以独立寻找)通道? 从文档中我读到FileChannel是唯一的 ,所以我的赌注(不幸的是)在示例中Thread_1将从位置600读取: 在这种情况下,你能建议一种不同的方法来独立于不同的线程寻找文件吗? 谢谢!

Java NIO是否支持广播或多播?

我正在搜索Java NIO是否实现了广播。 我需要创建一个使用多播或广播向其他对等体发送消息的对等体。 我在API 1.6中搜索,但我在DatagramChannel类中找不到任何内容。 提前致谢。

java.nio.file.FileAlreadyExistsException如何在java7中解决这个问题

我正在编写代码我正在用java nio api创建一个目录,我的代码段是 Path target = Paths.get(“”+folder_path+xx[0]); Set perms = null; if(xx[2].toLowerCase().equals(“read”)) perms =PosixFilePermissions.fromString(“r——–“); if(xx[2].toLowerCase().equals(“read/write”)) { perms =PosixFilePermissions.fromString(“rw——-“); } FileAttribute<Set> attr = PosixFilePermissions.asFileAttribute(perms); Files.createDirectory(target, attr); 但这是一个错误 java.nio.file.FileAlreadyExistsException: /home/ritesh/Desktop/userA 我知道的原因是因为一个目录已经具有相同的名称,但我想用我的代码目录生成的目录覆盖userA目录如何完成这个?

服务器不接受nio中的一个客户端

我正在尝试构建一个聊天应用程序。我有一个代码将数据从客户端发送到服务器。 当一个或多个客户端登录时(当客户端程序运行一次或多次时).server将不接受除第一次连接之外的其余连接。 请帮我解决这个问题,这是我的代码: public class Server { //Creating non blocking socket public void non_Socket() throws Exception { ServerSocketChannel ssChannel = ServerSocketChannel.open(); int port = 80; int i=0; ssChannel.socket().bind(new InetSocketAddress(port)); ssChannel.configureBlocking(false); while(true) { SocketChannel sc = ssChannel.accept();` if (sc == null) { System.out.println(“Socket channel is null”); Thread.sleep(5000); } else { System.out.println(“Socket channel is not null”); System.out.println(“Received […]

ByteBuffer getInt()问题

我们使用Java ByteBuffer与C ++服务器进行套接字通信。 我们知道Java是Big-endian,而Socket通信也是Big-endian。 因此,每当字节流接收并由Java放入ByteBuffer时,我们调用getInt()来获取值。 没问题,没有转换。 但是,如果我们以某种方式将ByteBuffer字节顺序专门设置为Little-endian(我的同事实际上已经这样做了), 当数据放入ByteBuffer时,Java会自动将Big-endian转换为Little-endian吗? 那么Little-endian版本的getInt()会给你一个正确的值吗? 我想上面两个问题的答案是肯定的。 但是当我尝试validation我的猜测并试图找到getInt()在ByteBuffer中的工作原理时,我发现它是一个抽象方法。 ByteBuffer的唯一子类是MappedByteBuffer类,它没有实现抽象的getInt()。 那么getInt()方法的实现在哪里呢? 对于发送,因为我们使用的是Little-endian ByteBuffer,我们需要在放入套接字之前将它们转换为Big-endian字节。

使用Java NIO直接访问Windows磁盘

我正在使用一个使用Java NIO的库,以便直接将文件映射到内存,但是我无法直接读取磁盘。 我可以使用带有UNC的FileInputStream直接读取磁盘,例如 File disk = new File(“\\\\.\\PhysicalDrive0\\”); try (FileInputStream fis = new FileInputStream(disk); BufferedInputStream bis = new BufferedInputStream(fis)) { byte[] somebytes = new byte[10]; bis.read(somebytes); } catch (Exception ex) { System.out.println(“Oh bother”); } 但是,我无法将其扩展到NIO: File disk = new File(“\\\\.\\PhysicalDrive0\\”); Path path = disk.toPath(); try (FileChannel fc = FileChannel.open(path, StandardOpenOption.READ)){ System.out.println(“No exceptions! Yay!”); } catch […]

使用NIO框架的Java程序

我正在做一些与Java NIO有关的研究。 我需要找到一些基于此框架的代表性应用程序。 请随时提出建议! 越多越好! 谢谢