Как я могу использовать C ++ для чтения файла, сохраненного с Java (writeObject)

Это новый тип вопросов. У меня есть файл, сохраненный с помощью метода writeObject в Java. Мне нужно читать с использованием C ++ для кода на основе C ++. Я пытался читать, используя метод чтения двоичных файлов, но я не мог читать правильно.

char buffString[50];

char buffer[100];
std::ifstream conFile(configFileName, std::ios::in|std::ios::binary);
//conFile.read(buffer, 100);
std::cout << buffer << std::endl;
if (!conFile) {
std::cout << " Error reading thee file " << std::endl;
} else {
std::cout << "Trying to read." << std::endl;
conFile.seekg(0);
conFile.read(buffer,14);  strcpy(buffString, buffer);
std::cout << buffString << "   buffer " << buffer << std::endl;
}

Файл данных, на который указывает этот conFile, содержит строку, целое и двойное число. Файл содержит что-то вроде следующего:

trapezDET.pngtcmstMeVsr? java.lang.DoubleJ) kDvaluexr? java.lang.Number
Pxp @ dsq ~ @ Nsq ~ @ dsq ~ @ V srjava.lang.Integer ⠤ 8 Ivaluexq ~ sq ~? sq ~ sq ~? Ə sq ~ q ~ sq ~ @ F кв ~? ~ кв? кв ~? ~ кв? ZG {t5 / дома / вега / NetBeansProjects / Том / данные / 6133.root

Я искал в сети, пока я не мог понять это.
Спасибо и всего наилучшего

1

Решение

Спецификация сериализации Java довольно хорошо определена. Я думаю, что это последняя спецификация:

https://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html

Однако будет не очень легко создать что-то, что читает этот формат файла. Если возможно, на стороне Java следует использовать более переносимый формат вывода.

(Вот ссылка на часть, которая фактически говорит о двоичной спецификации: https://docs.oracle.com/javase/6/docs/platform/serialization/spec/protocol.html )

2

Другие решения

Вы сможете сделать это для простых и фиксированных классов, таких как java.lang.String, но в целом ответ таков: вы не можете. В общем случае вам понадобится JVM для декодирования такого файла. Причина в том, что любой класс может определить свой собственный субпротокол Serialization, и только код в этом классе знает, что это за субпротокол, и единственный способ выполнить этот код — с помощью JVM.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector