Использование эффективного межязыкового формата обмена данными, такого как Google protobuf , может быть решением. Protobuf позволяет обмениваться объектами изображения следующим образом:
// Java image class
class Image {
// ...
byte[] getImageData() {
return imageData_;
}
int getVersion() {
return version_;
}
// ...
}
Объекты изображения могут быть сериализованы с использованием следующего сообщения protobuf:
message ImageMsg {
required int32 version = 1;
required bytes imageData = 2;
}
Компилятор protobuf сгенерирует классы Java и C ++ из этого определения. Из Java вы сериализуете Image как объект ImageMsg:
Image img;
// ...
ImageMsg.Builder msg = ImageMsg.newBuilder();
msg.setVersion(img.getVersion());
msg.setImageData(img.getImageData());
// The output stream could point to a file, socket, pipe or something else.
msg.writeTo(someOutputStream);
На стороне C ++ прочитайте объект из потока:
std::istream* is;
// initialize istream
ImageMsg msg;
msg.ParseFromIstream(istream);
Image img(msg.getVersion(), msg.getImageData());
Также возможно сделать обратное, то есть отправить объект изображения из C ++ в Java.