Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Работа с сетью > SocketChannel передача обьекта


Автор: goodday1941 11.11.2007, 14:17
 smile Кто-то может привести пример передачи обьека через SocketChannel с дальнейшим его распознанием? 

Автор: Platon 11.11.2007, 20:28
Могу и ошибаться, но я вижу решение такое:
При отправке объекта взять OutputStream и обернуть его ObjectOutputStream, вот собственно и всё, потом в ObjectoOutputStream писать объекты.

На входе взять InputStream и обернуть его ObjectInputStream, потом из ObjectoOutputStream читаешь объект.

Правда скорее всего нужна будет какая-то метка объекта, или просто проверять принятый объект с помощью "instanceof"

Автор: goodday1941 11.11.2007, 22:35
в случае сокет ченнела (в отличии от простых сокетов) я вроде как работаю не с стримами, а с байт буфером.. хотя могу и ошибаться, инфы в нете что-то вообще мало по этому вопросу

Автор: _Michael 12.11.2007, 18:00
Цитата(goodday1941 @  11.11.2007,  22:35 Найти цитируемый пост)
в случае сокет ченнела (в отличии от простых сокетов) я вроде как работаю не с стримами, а с байт буфером.

Именно. Поетому сериализиуеш сначала твой обьект в массив байт, потом етот массив байт обертаешь ByteBuffer'ом и его пишешь в SocketChannel. Вот набросал наскоро, думаю идея понятна.
Код

    MySerializibleObject test = new MySerializibleObject();
    ByteArrayOutputStream ba = new ByteArrayOutputStream();
    ObjectOutputStream out = new ObjectOutputStream(ba);
    out.writeObject(test);
    byte[] data = ba.toByteArray();
    ByteBuffer src = ByteBuffer.wrap(data); 
    SocketChannel s = SocketChannel.open();
    s.write(src);

Ето пишет в SocketChannel Чтение же в обратном порядке, думаю понятно smile

Автор: goodday1941 13.11.2007, 11:30
хм... идея понятна smile попутно вопрос.. насколько использование сокет ченела лучше использования обычных сокетов?

Добавлено через 30 секунд
PS... вроде как JMS работает на Сокет ченнеле а не на сокетах как я раньше думал

Автор: _Michael 13.11.2007, 13:46
http://exampledepot.com/egs/java.nio/ReadSocket.html тут есть пример чтения. там же линк на пример записи.

А тут пишет чем SocketChannel отличается от просто Socket'ов
http://www.ibm.com/developerworks/java/library/j-javaio/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)