![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: нет Всего: 98 |
Добрый вечер,
Помогите со странной проблемой: пишу в pipe с помощью RandomAccessFile.writeInt: RandomAccessFile pipe = new RandomAccessFile("\\\\.\\pipe\\rmserverpipe", "rws"); pipe.writeInt(0xABCDEF12); запись проходит "нормально" -- exception не бросается. Но "на другом конце" (читаю в "плюсах") из pipe'а вычитывается только один байт. Повторная "вычитка" дочитывает остальные три байта... На чтении все банально: result = ::ReadFile(pipe, &data, 4, &bytesRead, NULL); и при "плюсовой" записи все вычитывается за один раз. Соответственно вопрос: как "это" бороть? С уважением... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| leniviy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Я считаю, это норма. Даже если удастся побороть в данном случае, всё равно будет ненадежно. Так что надо ReadFile вызывать в цикле. И вообще инты надо передавать в network byte order.
Это сообщение отредактировал(а) leniviy - 16.8.2012, 22:06 |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: нет Всего: 98 |
Как это "норма"? -- Справка:
http://docs.oracle.com/javase/1.4.2/docs/a...l#writeInt(int) , вроде как, говорит что писаться должно четыре байта. Причем, почему-то, нет никаких механизмов контроля записи... "Принимающее" приложение переписывать -- не вариант: оно уже работает и лезть туда никто не даст... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| leniviy |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 552 Регистрация: 8.2.2003 Где: Спб Репутация: нет Всего: 5 |
Могу сделать предположение: жаба конвертит int в байт массив из 4 байт, меняет байты местами, и по-одному пишет в поток. Винда успевает отправить первый байт, в это время буфер пайпа заполняется 3 оставшимися байтами. Есть: IOException. баг в приложении. Добавлено через 5 минут и 40 секунд Во:
Добавлено через 9 минут и 30 секунд Попробуй так, но это из разряда ненадежных
Это сообщение отредактировал(а) leniviy - 16.8.2012, 22:18 |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |