Tag: nio

一个简单的规则,我何时应该使用Java NIO的直接缓冲区来进行网络I / O?

有天赋的人可以用简单直接的方式解释复杂的事情来解决这个问题吗? 要在使用Java NIO进行网络I / O时,何时使用直接ByteBuffers与常规ByteBuffers,以获得最佳性能? 例如:我应该读入堆缓冲区并从那里解析它,执行许多get()(逐字节)或者我应该将它读入直接缓冲区并从直接缓冲区解析?

带有通配符的Java 7 nio列表目录

我想使用通配符在目录中找到一个文件。 我在Java 6中有这个,但想将代码转换为Java 7 NIO: File dir = new File(mydir); FileFilter fileFilter = new WildcardFileFilter(identifier+”.*”); File[] files = dir.listFiles(fileFilter); 没有WildcardFileFilter ,我玩了很多。

java.nio.file在哪里

我正在阅读java文档,告诉我应该有一个java.nio.file命名空间。 但是当我尝试导入它时,预编译器抱怨它不存在。 这是怎么回事?

将LongBuffer / IntBuffer / ShortBuffer转换为ByteBuffer

我知道一种快速的方法将byte / short / int / long数组转换为ByteBuffer,然后获取一个字节数组。 例如,要将字节数组转换为短数组,我可以这样做: byte[] bArray = { 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 }; ByteBuffer bb = ByteBuffer.wrap(byteArray); ShortBuffer sb = bb.asShortBuffer(); short[] shortArray = new short[byteArray.length / 2]; sb.get(shortArray); 产生如下的短数组: [256, 0, 0, 0, 256, 0, 0, 0] 。 […]

使用NIO的Java RTP / RTCP库

是否有基于Java NIO或某些Java NIO框架(Netty,MINA,…)的Java RTP / RTCP库?

Tomcat / Web服务器与Java NIO /网络框架

目前,对于一个类,我正在实现一个服务器,它使用TCP和自定义应用程序层协议接收两种类型的连接。 虽然对于课程来说,这就是项目需要完成的方式,但我想知道使用像Tomcat或类似的Web服务器来接收所有传入通信的优点/缺点,而不是使用Java的NIO或像Mina这样的网络框架(我正在使用)或Netty(我想在某些时候玩这个)。 虽然我特别询问Java(因为这是我最熟悉的),但我们非常欢迎您将其扩展到任何其他语言。 我正在寻找关于性能,易用性,可扩展性的评论(包括它在开发方面和使用方面的规模),安全性以及您认为可以提供信息的任何其他基础。 无论如何,任何输入将不胜感激。 此致,奥马尔费雷尔

为什么Cassandra客户端在没有epoll的情况下失败?

当我在本地运行我的服务时,我收到epoll不可用的警告,因此它正在使用NIO。 很公平。 当我在Kubernetes中部署它时,我得到了这个,这阻止了服务运行: 2017-03-29T19:09:22.739482458Z 19:09:22.739 WARN com.datastax.driver.core.NettyUtil – Found Netty’s native epoll transport in the classpath, but epoll is not available. Using NIO instead. 2017-03-29T19:09:22.739505903Z java.lang.UnsatisfiedLinkError: could not load a native library: netty-transport-native-epoll 2017-03-29T19:09:22.739509966Z at io.netty.util.internal.NativeLibraryLoader.load(NativeLibraryLoader.java:224) 2017-03-29T19:09:22.739513326Z at io.netty.channel.epoll.Native.loadNativeLibrary(Native.java:269) 2017-03-29T19:09:22.739516421Z at io.netty.channel.epoll.Native.(Native.java:64) 2017-03-29T19:09:22.739519628Z at io.netty.channel.epoll.Epoll.(Epoll.java:33) 2017-03-29T19:09:22.739522527Z at java.lang.Class.forName0(Native Method) 2017-03-29T19:09:22.739525253Z at java.lang.Class.forName(Class.java:264) 2017-03-29T19:09:22.739528047Z at com.datastax.driver.core.NettyUtil.(NettyUtil.java:68) […]

快速ByteBuffer到CharBuffer或char

将java.nio.ByteBuffer a转换为(新创建的) CharBuffer b或char[] b的最快方法是什么? 通过这样做很重要, a[i] == b[i] 。 这意味着,不是a[i]和a[i+1]一起组成一个值b[j] , getChar(i)会做什么,但这些值应该是“传播”。 byte a[] = { 1,2,3, 125,126,127, -128,-127,-126 } // each a byte (which are signed) char b[] = { 1,2,3, 125,126,127, 128, 129, 130 } // each a char (which are unsigned) 请注意, byte:-128与char:128具有相同(低8位)的位。 因此,我假设“最佳”解释将如上所述,因为位是相同的。 之后我还需要相反的翻译:将char[]或java.nio.CharBuffer重新放回java.nio.ByteBuffer的最有效方法。

写入通道后,Java Selector返回带有OP_READ的SelectionKey,而无需在无限循环中的数据

我的代码出了问题:我用Selector编写了简单的SocketChannel客户端,启动后成功从服务器读取消息(服务器发送事件)。 但是在写入socket(参见main方法)之后,选择器开始在infinyty循环中返回可读套接字,handleKey返回-1个字节readed,因此选择器所有时间都返回OP_READ SelectionKey而没有数据用于读取。 对不起我的英语不好。 谢谢。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.SocketChannel; import java.util.Iterator; public class SelectorTest { public SelectorTest() throws IOException { selector = Selector.open(); } private void runSelector() { new Thread(new Runnable() { public void run() { alive = true; try { while(alive) { […]

Haproxy + netty:防止连接重置exception的方法?

我们在netty-3.6运行的后端使用haproxy。 我们正在处理大量的连接,其中一些可能是长期存在的。 现在的问题是,当haproxy关闭连接以实现重新平衡时,它会通过发送tcp-RST来实现。 当netty使用的sun.nio.ch-class看到这个时,它会抛出一个IOException:“Connection by peer”。 跟踪: sun.nio.ch.FileDispatcherImpl.read0(Native Method):1 in “” sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39):1 in “” sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:225):1 in “” sun.nio.ch.IOUtil.read(IOUtil.java:193):1 in “” sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:375):1 in “” org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:64):1 in “” org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:109):1 in “” org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:312):1 in “” org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:90):1 in “” org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178):1 in “” java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145):1 in “” java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615):1 in “” java.lang.Thread.run(Thread.java:724):1 in “” 这会导致每个配置出现以下问题: 选项http-pretend-keepalive 这是最好的(因为haproxy似乎关闭了大多数与FIN而不是RST的连接),但仍然每个服务器每秒产生大约3个exception。 此外,它有效地进行了网络负载平衡,因为一些传入连接非常长,并且具有非常高的吞吐量:使用pretend-keepalive,它们永远不会被haproxy重新平衡到另一台服务器。 选项http-keep-alive 由于我们的后端期望保持活动连接真正保持活动(因此不会自行关闭它们),因此此设置相当于每个连接最终会导致一个exception,从而导致我们的服务器崩溃。 我们尝试添加prefer-last-server,但它没有多大帮助。 选项http-server-close […]