|
|
|
ObjectOutputStream и ObjectInputStream и UDP
|
|||
|---|---|---|---|
|
#18+
Задача, такая: нужно принять по UDP пакеты на два сокета и передать их в другой(общий) поток. Выбрал следующий путь: принимаю пакеты-получаю объекты-и сериализую их в общий поток! Для передачи в общий поток использую PipedOutputStream и PipedInputStream. Для сериализации ObjectOutputStream и ObjectInputStream. Но возникла проблема, когда кидаю из двух сокетов в один поток java.io.OptionalDataException. Вопрос, как мне лучше разделить объекты в ObjectInputStream, передаваемые в один поток и возможно ли это вообще? Для одного сокета все работает! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 18:33:54 |
|
||
|
ObjectOutputStream и ObjectInputStream и UDP
|
|||
|---|---|---|---|
|
#18+
Зависит от того что это за "другой(общий) поток" ? Варианта, собственно, только два. Либо сериализовать (выстравивать передачу данных строго по очереди), либо рапараллеливать. Для сериализации можно выделить отдельный Thread для записи в PipedOutputStream. Метод записи сделать synchronized. Но это может стать узким местом, т.к. все входящие запросы будут ждать записи друг друга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 18:40:30 |
|
||
|
ObjectOutputStream и ObjectInputStream и UDP
|
|||
|---|---|---|---|
|
#18+
О! Так если объекты серализованные. Может из через concurent коллекцию писать? Сразу будет и очередь и синхронизация. Т.е. заводим BlockingQueue и отдельный Thread. Thread тупо в цикле читает из этой очереди и отправляет объекты на выход. А прёмник из сокетов - многопоточный и просто пишет объекты в коллекцию. Так будет и очередь и сериализация данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 18:46:07 |
|
||
|
ObjectOutputStream и ObjectInputStream и UDP
|
|||
|---|---|---|---|
|
#18+
Спасибо! забыл указать, что сокеты находятся в разных потоках, они принимают пакет, создают объект и сериализуют его в PipedOutputStream, причем эти два потока используют один и тот же PipedOutputStream. А в третьем потоке принимаю в PipedInputStream и пытаюсь его обработать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 18:46:55 |
|
||
|
ObjectOutputStream и ObjectInputStream и UDP
|
|||
|---|---|---|---|
|
#18+
Спасибо! забыл указать, что сокеты находятся в разных потоках, они принимают пакет, создают объект и сериализуют его в PipedOutputStream, причем эти два потока используют один и тот же PipedOutputStream. А в третьем потоке принимаю в PipedInputStream и пытаюсь его обработать! Как я понял вы предлагаете каждому сокету передать поток который и будет синхронизовано кидать сериализованные объекты в PipedOutputStream? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 18:48:06 |
|
||
|
ObjectOutputStream и ObjectInputStream и UDP
|
|||
|---|---|---|---|
|
#18+
testjavaКак я понял вы предлагаете каждому сокету передать поток который и будет синхронизовано кидать сериализованные объекты в PipedOutputStream? У сокетов свои потоки, их задача считать данные и как можно раньше от них избавится, чтобы не быть узким местом. Эти данные помещаются в очередь. Это очень быстрая операция. Отдельный поток читает из очереди. Когда очередь пустая он блокируется. Как только появляется новый пакет, он просыпается и обрабатывает его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 18:51:08 |
|
||
|
ObjectOutputStream и ObjectInputStream и UDP
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЭти данные помещаются в очередь. Это очень быстрая операция. Отдельный поток читает из очереди. Так! В потоке каждого сокета храним очередь?!! А отдельный поток будет читать эти очереди??!! Тогда вопрос каким образом оптимальнее(быстрее) проводить эту пердачу? Я вот передаю так: private void messageToObjectOutput(Message mes) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(pout); synchronized(mes) { oos.writeObject(mes); oos.flush(); pout.flush(); } } pout это PipedOutputStream а принимаю : ObjectInputStream ois = new ObjectInputStream(pin); Message mes = (Message)ois.readObject(); pin PipedInputStream ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2012, 19:04:27 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=317&tid=2132887]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
39ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 343ms |
| total: | 490ms |

| 0 / 0 |
