Преимущества Java NIO, если есть один клиент и требуется полное чтение объекта - PullRequest
2 голосов
/ 22 января 2012

Предположим, что для TCP-сервера требуется, чтобы он был подключен к одному клиенту и записывал и считывал сериализованные полные объекты.Частота чтения и записи высока.Учитывая требование, каковы преимущества переноса кода из Java-ввода-вывода в Java-NIO?

Текущий код выглядит примерно так .. Выделенный поток для чтения объекта из сокета и выделенный поток для записи объекта в сокет.Существует один входной / выходной поток объектов, в который объекты записываются / читаются.

// Reading from socket 
private SomeObject readObject() throws IOException, ClassNotFoundException {
    Object object = oiStream.readObject();
    if (object != null && object instanceof SomeObject) {
        SomeObject someObject = (SomeObject) object;
        return someObject;
    }
    return null;
}

    // Writing to socket 
    public void writeToSocket(SomeObject someObject) throws IOException {
    if (isSocketOpen()) {
        ooStream.writeObject(someObject);
        ooStream.flush();
    } 
}

Что будет эквивалентно NIO и его преимущества, учитывая тот факт, что только один клиент будет подключаться к серверу.Пожалуйста, не обсуждайте каналы / селекторы / буферы, а сравнивайте две библиотеки для данного требования.

Ответы [ 2 ]

3 голосов
/ 22 января 2012

Сериализация объектов настолько дороже, чем разница между IO и NIO, что вы вряд ли заметите разницу. esp as Serialization предназначен для работы с IO.

Если вы хотите улучшить скорость, я предлагаю вам попробовать оптимизировать сериализацию.

http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

http://vanillajava.blogspot.com/2011/10/serialization-using-bytebuffer-and.html

Если сериализация не была проблемой, вы можете передавать данные быстрее с блокировкой NIO, чем с блокировкой ввода-вывода.

http://vanillajava.blogspot.com/2010/07/java-nio-is-faster-than-java-io-for.html

3 голосов
/ 22 января 2012

Важно не количество клиентов, а количество одновременных подключений. Когда вы говорите «один клиент», значит ли это, что одновременно будет не более одного соединения? Если это так, то я не вижу никаких преимуществ в использовании NIO, поскольку сервер должен иметь возможность обрабатывать все в одном потоке.

...