Чтение из файла рекорда

 
 
 
Сообщения:2
Добрый день.

Есть программа на делфи, в которой я сохраняю массив Record в файл


type
  TLin = packed record
    x1: Integer;
    x2:Integer;
    x3:Integer;
    x4:Integer;
end;

var
  DataLin:PAnsiChar;
  Lin:TLin;

добавляю так
Lin.X1=12;
Lin.X2=77;
....
Move(Lin,DataLin[Count*16],16);


Сохраняю так
  FSFile:=TFileStream.Create('test',fmCreate);
  FSFile.Seek(0, soFromBeginning);
  FSFile.WriteBuffer(DataLin^,Count*16);//16 это размер в байтах одного рекорда, Count кол-во рекордов
  FSFile.destroy;


Загружаю через ReadBufer и через Move(DataLin[i*16],Lin,16);// вижу I элемент

подобная логика и в С++
вместо PAnsiChar использую char* DataLin, загружаю через ifstream.read, до объекта обращаюсь memcpy(&Lin,&DataLin[i*16],16);, и тоже все работает

А теперь вопрос...
Подскажите как это реализовать в Java, я уже весь мозг себе сломал(
 
 
Сообщения:802
Ну вот так, чтобы байтовый массив записать в память, занятую объектом, или массив рассматривать как объект - такие возможности намеренно исключены.
Джавовский путь - самому читать байты и формировать из них значения полей объекта.
Можно порыться в десятках библиотеках сериализации в надежде найти такую, в которой внешнее представление совпадает с вашим. Но это мина замедленного действия.
Единственное надежное средство - считать в ByteBuffer и читать оттуда поля поштучно через getInt(). Учесть порядок байтов (little-endian, big-endian).
 
 
Сообщения:2
Спасибо, я пробовал этот способ, но он не отработал, так как я не задал little-endian, теперь все работает корректно.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет