-1

我正在创建一个始终运行并从套接字侦听消息的 android 服务。但它不能以良好的性能工作,我正在寻找一些 nio 替代品或教程。

一直监听套接字的最佳方法是什么?

AndroidAsync 是否支持标准套接字?https://github.com/koush/AndroidAsync

有人用过 Apache Mina 吗?我对米娜有性格问题。http://mina.apache.org/

或者我怎样才能使用标准插座以良好的性能完成这项工作

等待你的经验。

谢谢

4

2 回答 2

0

int read()从套接字(for和)获得良好性能的正常方法write(int)是使用缓冲流/读取器/写入器。这减少了系统调用的数量,并使一次字节或字符的 I/O 速度更快。

我不认为使用 NIO 会产生重大影响。如果问题不是缓冲,那么(IMO)可能是网络带宽和/或延迟问题。如果是这种情况,那么您可以在 Java 中做的事情很少会产生很大的不同。

于 2013-08-17T15:48:16.233 回答
-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习惯了就真的没那么难了 :)

于 2013-08-17T16:33:09.767 回答