Показать сообщение отдельно
Старый 15.02.2012, 22:47
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 11  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Для флеша аналогичные методы присутствуют?
Во флеше есть ByteArray. В него можно писать точно так же, как в сокет, затем преобразовать в массив байт. Это примерно то же, что и пара DataOutputStream+ByteArrayOutputStream в java.
Цитата:
С другой стороны, методы java вроде бы ожидающие, так что не знаю, есть ли смысл?
Чисто практически - в java все будет работать и так. Я бы, наверное, сделал байт (или два байта) длины для симметричности протокола (в обе стороны длина + пакет). Возможно - еще и контроль длины пакета (пакет вычитывать отдельно и затем разбирать).
Цитата:
В принципе вы правы, но с точки зрения кода работать это будет медленнее, хотя бы за счет времени, которое уйдет на создание экземпляра обертки в памяти.
Быстрее. Гораздо быстрее! Запись в сокет тяжелее выделения памяти на порядки. Передача данных в сокет - это системный вызов с переключением контекстов (в режим ядра). Обычно напрямую с socket.getInputStream/socket.getOutputStream не работают, а оборачивают их в BufferedInputStream/BufferedOutputSteram. Это позволяет читать/писать большими блоками, уменьшается количество системных вызовов и немного увеличивая расход памяти. При сборке сообщения в памяти (через ByteArrayOutputStream) и следующей отправке сразу (c socket.flush) вам BufferedOutputStream не нужен (если вы пишете сразу os.write(byte[])). А вот socket.getInputStream я бы рекомендовал обернуть в bufferedInputStream. Похожие техники используются и при работе с файлами.