Я сделал слушатель сокета в Java, который прослушивает данные на двух портах и выполняет операции с прослушиваемыми данными. Теперь сценарий таков, что когда и прослушиватель, и устройство, которое передает данные, работают и работают, слушатель получает данные, по одному за раз (каждые данные начинаются с «#S» и заканчиваются «.») И когда прослушиватель не подключен или не прослушивает, устройство сохраняет данные в своей локальной памяти и, как только прослушиватель подключается, отправляет все данные в прилагаемой форме, например:
"#S ...DATA...[.]#S...DATA...[.]..."
Теперь я реализовал это таким образом, что, какие бы данные ни слушал ни получал на любом из портов, он конвертируется в шестнадцатеричную форму, а затем выполняет операции с шестнадцатеричным форматом входных данных. Шестнадцатеричная форма "#S "это" 2353 "и шестнадцатеричная форма". " это "2e". Код для обработки шестнадцатеричной формы входных данных выглядит следующим образом.
hexconverted1
- это строка, содержащая преобразованную в шестнадцатеричном виде форму всех входных данных, которая поступает на любой порт.
String store[];
store=hexconverted1.split("2353");
for(int m=0;m<store.length;m++)
store[m]="2353"+store[m];
PrintWriter out2 = new PrintWriter(new BufferedWriter(new FileWriter("C:/Listener/array.bin", true)));
for(int iter=0;iter<store.length; iter++)
out2.println(store[iter]);
out2.close();
То, что я пытаюсь выполнить с помощью приведенного выше кода, заключается в том, что всякий раз, когда поступает куча данных, я пытаюсь сканировать данные и просеивать все данные из этой пачки и сохранять их в строковом массиве, чтобы операции, которые я хочу выполнить в шестнадцатеричной форме данных, могут быть выполнены более простым способом. Поэтому, когда я записываю содержимое массива в файл BIN, выходные данные различаются для одного и того же ввода. Когда я отправляю сгруппированные данные из 280 пакетов данных, добавляемых один за другим, иногда массив содержит 180, а иногда 270. Но для меньших размеров я получаю желаемые результаты, и размер массива 'store' равен также, как и ожидалось.
Я совершенно не понимаю, что происходит, и любые указатели будут очень полезны.
Для большей ясности данные, которые я получаю через порты, в основном не читаются, и часто единственными читаемыми частями являются начальные биты "#S" и конечный бит ".". Поэтому я использую комбинацию BufferedInputStream
и InputStream
, чтобы прочитать входящие данные и преобразовать их в шестнадцатеричный формат, и я совершенно уверен, что преобразование в шестнадцатеричное происходит хорошо.