|
|
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
Есть что-то похожее для с++? или вопрос так можно поставить: как в с++ клиенте сделать стрим, который будет работать с DataInputStream, DataOutputStream в Java сервер приложении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:17:06 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
Непонятно, что значит "работать с DataInputStream, DataOutputStream". Если вы имеете ввиду, работа с объектами такого типа из С++ через JNI, то читайте туториалы по JNI. Если вам надо уметь создать набор байт, которые сможет понять Java приложение, или наоборот - распарсить бинарные сериализованные данные из Java, то читайте про то, в каком формате сериализуются объекты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:22:48 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:23:22 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
DEVcoach Непонятно , что значит "работать с DataInputStream, DataOutputStream". Если вы имеете ввиду, работа с объектами такого типа из С++ через JNI, то читайте туториалы по JNI. Если вам надо уметь создать набор байт, которые сможет понять Java приложение, или наоборот - распарсить бинарные сериализованные данные из Java, то читайте про то, в каком формате сериализуются объекты. как в с++ клиенте сделать стрим, который будет работать с DataInputStream, DataOutputStream в Java сервер приложении ? т.е. в как в с++ клиенте коннектиться и передавать, получать стрим с сервера на Java, использующего DataInputStream, DataOutputStream. Предположим мне надо из с++ передать стримом файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:25:44 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
DataInputStream и DataOutputStream это бесполезные устаревшие классы. Посмотрите их исходный код. Он примитивен. Реализовать подобное на С++ не будет проблемой. Но лучше используйте протоколы, которые поддерживаются разными платформами. Вышеупомянутый protobuf, SOAP, hessian и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:27:21 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
BlazkowiczDataInputStream и DataOutputStream это бесполезные устаревшие классы. Посмотрите их исходный код. Он примитивен. Реализовать подобное на С++ не будет проблемой. Но лучше используйте протоколы, которые поддерживаются разными платформами. Вышеупомянутый protobuf, SOAP, hessian и т.п. хых.... проблема в том, что сервер на Java со стримами есть, и надо попробовать коннектнуться к нему из с++. Да, там несложный класс, но он тянет за собой еще ккие-то... я думал может уже люди что-то подобное сочинили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:29:19 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
Вы некорректно воспринимаете проблему. Если вам надо добиться коммуникации между Java приложением и C++ приложением, то вам необходимо: 1) Определиться со способом коммуникации. Сокеты, shared memory, файлы, и т.д. 2) Определиться с протоколом. Бинарный, текстовый, и т.д. Data(Input|Output)Stream'ы - это просто обертки. Они не определяют способы коммуникации процессов, и не определяют протокол. Например, один объект может сериеализоваться через классический джавовский протокол Serializable, другой через кастомный протокол Externalizable, а для третьего вообще написан свой кастомный маршаллер, который транспарентно заменяет собой джавовский Serializable. И с точки зрения кода все они смогут работать через Data(Input|Output)Stream. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:33:28 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
DEVcoach, Вы часом Object и Data Stream не попутали? Object*Stream - отвечает за сериазирацию. Data*Stream простейшая обертка над *Stream для записи примитивных типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:37:18 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
BlazkowiczDEVcoach, Вы часом Object и Data Stream не попутали? Object*Stream - отвечает за сериазирацию. Data*Stream простейшая обертка над *Stream для записи примитивных типов.Верно, читай одно, думаю о другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:47:33 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
Winnipuhхых.... проблема в том, что сервер на Java со стримами есть, и надо попробовать коннектнуться к нему из с++. Да, там несложный класс, но он тянет за собой еще ккие-то... я думал может уже люди что-то подобное сочинили На самом деле Data*Stream даже не предоставляет протокола. Т.е. пакеты вам все равно надо будет собирать схожим кодом в Java и C++. Data*Stream всего лишь предоставляет способ чтения\записи примитивов. Аналогичные методы для аналогичных примитивов пишутся на С++ за пару часов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 15:47:51 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
Winnipuhкак в с++ клиенте сделать стрим, который будет работать с DataInputStream, DataOutputStream в Java сервер приложении?Если не ошибаюсь, то там разница всего лишь в порядке передаваемых байтов . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2013, 16:17:11 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
UsmanWinnipuhкак в с++ клиенте сделать стрим, который будет работать с DataInputStream, DataOutputStream в Java сервер приложении?Если не ошибаюсь, то там разница всего лишь в порядке передаваемых байтов . да, я взял thrift, пишу так из с++ // MAGIC = 0xCA552DFA protocol->writeI32(ms->MAGIC); в Java сервер приходит, читаются 4 байта, public final int readInt() throws IOException { int ch1 = in.read(); int ch2 = in.read(); int ch3 = in.read(); int ch4 = in.read(); if ((ch1 | ch2 | ch3 | ch4) < 0) throw new EOFException(); return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0)); } и на выходе получается целое = 4, вместо нужного.. в чем причина? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 15:33:26 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
Winnipuhв чем причина?Получается, что Вы считываете 4 раза по 4 байта. Исправьте и попробуйте заново: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 16:25:07 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
UsmanWinnipuhв чем причина?Получается, что Вы считываете 4 раза по 4 байта. Исправьте и попробуйте заново: Код: java 1. 2. 3. 4. 5. на стороне сервера в Java я не могу исправить? только на клиенте. Но что интересно: взял утилиту Hercules (www.hw-group.com), сделал коннект, далее сделал send (hex) и всунул то шестнадцатеричное число - сервер нормально распознал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 16:38:26 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
Winnipuh, Попробуйте отправить с клиента таким образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 17:11:44 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
теперь прочитанное целое = 16 еще раз, вот так оно читается в Java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 17:32:05 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
BlazkowiczDataInputStream и DataOutputStream это бесполезные устаревшие классы. Посмотрите их исходный код. Он примитивен. Реализовать подобное на С++ не будет проблемой. Но лучше используйте протоколы, которые поддерживаются разными платформами. Вышеупомянутый protobuf, SOAP, hessian и т.п. Тем не менее он нигде не deprecated если смотреть с точки зрения документации производителя. http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 17:33:38 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
maytonТем не менее он нигде не deprecated если смотреть с точки зрения документации производителя. Не аргумент. В JSE классы вообще редко объявляются deprecated. Тем неменее там всё ещё полно редкого хлама с пометкой since JDK 1.0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 17:45:24 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
UsmanWinnipuh, Попробуйте отправить с клиента таким образом: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. сделал так: занес код чтения прямо в код сервера, чтобы можно было отладить. Вот что имеем: шлю из с++ protocol->writeI32(mb.magic); получаю в Java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. может это 4 - длина в байтах, которые отправлены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 17:49:59 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
да, сначала идет длина в байтах, а ее не должно быть на чтении, сервер не предполагает, что длина передается перед данными. То ли thrift добавляет, то ли х.е.з... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 17:56:49 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
WinnipuhТо ли thrift добавляет, то ли х.е.з...А на сервере тоже стоит thrift ? Описание функции writeI32Write an i32 as a zigzag ( O_o ) varint. P.S. Очень насторожило слово zigzag ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 18:54:45 |
|
||
|
DataInputStream, DataOutputStream в с++
|
|||
|---|---|---|---|
|
#18+
UsmanWinnipuhТо ли thrift добавляет, то ли х.е.з...А на сервере тоже стоит thrift ? Описание функции writeI32Write an i32 as a zigzag ( O_o ) varint. P.S. Очень насторожило слово zigzag там есть он, но в данном случае не используется. Я решил проблему, TFramedTransport к каждому фрейму добавляет длину. Заменимл его на TBufferedTransport - всё гут. Но остался вопрос: Хотелось бы упаковать заголовок сообщения, в котором несколько целых, далее массив байтов внутри - в массив байтов и отправить на сервер. Как передать массив байтов в thrift? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2013, 22:51:32 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38381906&tid=2128711]: |
0ms |
get settings: |
19ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
43ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 304ms |
| total: | 480ms |

| 0 / 0 |
