Java 从套接字读取数据-无性能
我正在创建一个android服务,它总是运行并监听来自socket的消息。但它的性能不好,我正在寻找一些nio替代品或教程 什么是始终收听套接字的最佳方式 AndroidSync支持标准插座吗 有人用过ApacheMina吗?我和米娜的性格有问题 或者,我如何使用standart套接字以良好的性能完成这项工作 等待你的经历Java 从套接字读取数据-无性能,java,android,sockets,mina,androidasync-koush,Java,Android,Sockets,Mina,Androidasync Koush,我正在创建一个android服务,它总是运行并监听来自socket的消息。但它的性能不好,我正在寻找一些nio替代品或教程 什么是始终收听套接字的最佳方式 AndroidSync支持标准插座吗 有人用过ApacheMina吗?我和米娜的性格有问题 或者,我如何使用standart套接字以良好的性能完成这项工作 等待你的经历 感谢从套接字(对于int read()和write(int))获得良好性能的正常方法是使用缓冲流/读/写器。这减少了系统调用的数量,并使每次I/O的字节或字符速度更快 我不认
感谢从套接字(对于
int read()
和write(int)
)获得良好性能的正常方法是使用缓冲流/读/写器。这减少了系统调用的数量,并使每次I/O的字节或字符速度更快
我不认为使用NIO会有很大的不同。如果问题不是缓冲,那么(IMO)可能是网络带宽和/或延迟问题。如果是这样的话,您在Java中所能做的事情就很少了。我有一些使用
Java.nio
编写字符串的方便方法:
private static Charset charset;
static
{
charset = Charset.forName("UTF-8");
}
public static void writeString(SocketChannel sc, String string) throws IOException {
CharBuffer c = CharBuffer.wrap(string);
ByteBuffer b = charset.encode(c);
b.compact();
b.flip();
sc.write(b);
}
public static String readString(SocketChannel sc) throws IOException {
ByteBuffer bbuf = ByteBuffer.allocate(8096);
sc.read(bbuf);
bbuf.flip();
CharBuffer cbuf = charset.decode(bbuf);
return cbuf.toString();
}
您只需建立
SocketChannel
连接,就可以随心所欲地使用这些连接<代码>java.nio一旦你习惯了它,就真的没有那么难:)为什么你的缓冲区大小是8096?你们为什么要忽略流的结尾?我只是在那个里插入了一个任意的数字,它是为了我的目的而工作的。请解释一下这条河的尽头?