#java
#java
Вопрос:
Я пытался найти способ отправить int [] с сервера клиенту. У меня есть базовая многопользовательская игра, которая работает по локальной сети. В настоящее время нет ограничений для игроков, кроме тех, которые налагаются самой Java. У каждого игрока есть квадрат, которым они могут управлять с помощью WASD. В настоящее время на сервере я использую byte[] для хранения всех позиций игрока. Проблема в том, что позиции не могут превышать 128 или -127. Однако DataOutputStream может записывать byte[] s, но не int[]s . Я видел, что существует функция writeInt (), но она может отправлять только одно число, а не их множество в одной переменной. Я беспокоюсь об использовании этого, потому что я не хочу, чтобы клиенты получали целые числа в неправильном порядке и что-то перепутали. Итак, реальный вопрос заключается в следующем: каков наилучший способ отправить кучу целых чисел между клиентами и сервером? Я также хотел бы сохранить скорость как можно выше. Я могу опубликовать свой текущий код, если вам нужно его увидеть.
Кстати, это мой первый пост, поэтому, если я сделал что-то не так, пожалуйста, дайте мне знать.
Комментарии:
1. Проверьте
ByteBuffer
иIntBuffer
.2. На этом этапе вам может показаться интересным механизм сериализации в Java.
Ответ №1:
Вам нужно:
-
Получите соединение с клиентом. В настоящее время это обычно выполняется классом SocketChannel в пакете java.nio.
-
Если у вас есть массив целых чисел, используйте класс IntBuffer и оберните свой int[] в экземпляр IntBuffer.
-
Укажите ваш объект IntBuffer в качестве аргумента для метода write() вашего SocketChannel. Не забудьте сначала открыть соединение.
- Закройте сокет (начиная с Java 7, существует блок try-with, который автоматически закрывает ресурсы для вас).