Как разобрать байт [] (включая кодированные значения BCD) в объект в Java

Я хотел бы знать, есть ли простой способ «привести» массив байтов, содержащий структуру данных известного макета, к объекту. byte[] состоит из упакованных значений BCD, 1- или 2-байтовых целых значений и символьных значений. Я получаю byte[] через чтение файла с FileInputStream.

Люди, которые работали с системами IBM-Mainframe, сразу поймут, что я имею в виду — проблема в том, что мне приходится делать то же самое на Java.

Любые предложения приветствуются.


person mmm    schedule 10.02.2011    source источник


Ответы (2)


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

Полагаться на представление в памяти всегда казалось мне хрупким...

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

person Jon Skeet    schedule 10.02.2011

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

Чтобы преобразовать упакованный номер BCD, вам нужно извлечь две закодированные цифры. Четыре младших бита кодируют младшую цифру, и вы получаете это, используя & с 15 (1111 двоичных). Четыре старших бита кодируют самую старшую цифру, которую вы получите, сдвинув вправо на 4 бита и поставив & на 15.

Также обратите внимание, что у IBM, скорее всего, есть доступные инструменты, если вы действительно этим занимаетесь. Для IBM я ищу jt400 IBM Toolbox для Java.

person Thorbjørn Ravn Andersen    schedule 10.02.2011