我正在创建一个始终运行并从套接字监听消息的android服务。但它不能很好地运行,我正在寻找一些nio替代或教程。
有史以来一直听套接字的最佳方法是什么?
AndroidAsync是否支持标准套接字? https://github.com/koush/AndroidAsync
有没有人使用过Apache Mina?我和Mina有性格问题。 http://mina.apache.org/
或者我如何使用标准套接字以良好的性能完成这项工作
等待你的经历。
由于
答案 0 :(得分:0)
从套接字(int read()
和write(int)
)获得良好性能的正常方法是使用缓冲流/读取器/写入器。这减少了系统调用的数量,并使I / O的字节或字符更快。
我不认为使用NIO会产生重大影响。如果问题不是缓冲,则(IMO)可能是网络带宽和/或延迟问题。如果是这种情况,你可以用Java做很多事情,这会产生很大的不同。
答案 1 :(得分:-1)
我有一些使用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
真的不那么难:)