Нужна помощь в получении данных ByteArray - PullRequest
0 голосов
/ 22 марта 2010

Я пытаюсь получить данные байтового массива с компьютера. Он отправляет 3 различных типа структуры данных каждое из которых имеет различное количество полей, состоящих в основном из int и нескольких чисел с плавающей запятой, и байтовых размеров, первый из которых составляет 320 байтов, 420 для второго типа и 560 для третьего. Когда запускающая программа запускается, она запускает все 3 типа данных одновременно с интервалом в 1 секунду. Пример:

Заказ на отправку: Pack1 - 320 байт Через 1 секунду Pack2 - 420 байт Через 1 секунду Pack3 - 560 байт Через 1 секунду Pack1 - 320 байт ... .. .

Как проверить размер входящего байта перед его передачей:

byte[] handsize = new byte[bytesize];

поскольку все данные, которые я получаю, вышли из строя, например, с использованием следующей операции read all int:

System.out.println("Reading data in int format:" + " " + datainput.readInt());

Я получаю много разных наборов значений всякий раз, когда я запускаю свою прогу, хотя с некоторыми действительными данными поля, но они повсюду.

Я не совсем уверен, как именно это сделать, но я попробовал следующее, и, видимо, мои поля данных не получение в правильной последовательности:

BufferedInputStream bais = new 

 BufferedInputStream(requestSocket.getInputStream());

 DataInputStream datainput = new DataInputStream(bais);

 byte[] handsize = new byte[560]; 

 datainput.readFully(handsize);


 int n = 0;

 int intByte[] = new int[140];

 for (int i = 0; i < 140 ; i++) { 

 System.out.println("Reading data in int format:" + " " + datainput.readInt());

 intByte[n] = datainput.readInt();
   n = n + 1;
     System.out.println("The value in array is:" + intByte[0]);
       System.out.println("The value in array is:" + intByte[1]);
         System.out.println("The value in array is:" + intByte[2]);
           System.out.println("The value in array is:" + intByte[3]);

Также из приведенного выше кода порядок значений распечатывается с помощью

System.out.println("Reading data in int format:" + " " + datainput.readInt());

и

System.out.println("The value in array is:" + intByte[0]);
 System.out.println("The value in array is:" + intByte[1]);

разные.

Любая помощь будет оценена. Спасибо

Ответы [ 2 ]

1 голос
/ 22 марта 2010

ты не можешь. вам нужно явно отправить длину данных (или тип данных, из которого вы будете получать длину) перед данными, или иметь другой метод просмотра данных и определения их длины (самоописание, как строка с нулевым символом в конце). 1001 *

редактирование: Другой способ определить длину - поместить одно сообщение в один сеанс TCP. не рекомендуется, потому что это слишком много, но это будет работать.

0 голосов
/ 22 марта 2010

Вы вызываете datainput.readInt() дважды на каждой итерации цикла. Вы, вероятно, хотели прочитать только один int в каждой итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...