Java 从套接字读取数据-无性能

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的字节或字符速度更快 我不认

我正在创建一个android服务,它总是运行并监听来自socket的消息。但它的性能不好,我正在寻找一些nio替代品或教程

什么是始终收听套接字的最佳方式

AndroidSync支持标准插座吗

有人用过ApacheMina吗?我和米娜的性格有问题

或者,我如何使用standart套接字以良好的性能完成这项工作

等待你的经历


感谢

从套接字(对于
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?你们为什么要忽略流的结尾?我只是在那个里插入了一个任意的数字,它是为了我的目的而工作的。请解释一下这条河的尽头?