Попытка сериализации объекта MatlabEngine в Java - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь создать простую многоагентную систему на Java.Агенты должны иметь возможность взаимодействовать с MATLAB.До сих пор я использовал класс MatlabEngine, предоставленный Mathworks, для этого интерфейса.Это прекрасно работает в одном Java-классе (агенте), но пытаться переключаться между несколькими агентами было сложно.Насколько я знаю, агенты могут общаться друг с другом только через класс ACLMessage, который позволяет отправлять сообщения.Однако сообщения могут только быть строками и никаким другим типом данных.Я хотел бы сериализовать класс MatlabEngine в строку, отправить его как сообщение другим агентам, а затем десериализовать объект.Однако мой компилятор говорит мне, что MatlabEngine не сериализуем.Это можно обойти?Или, что еще лучше, есть ли более простой способ сделать это?

Вот код, который я пытаюсь использовать для сериализации объекта MatlabEngine:

String serializedObject = "";
try {
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream so = new ObjectOutputStream(bo);
    so.writeObject(matlabEngineObject);
    so.flush();
    serializedObject = bo.toString();
 } catch (Exception e) {
    System.out.println(e);
 }

А вот код I 'm пытается использовать для десериализации полученную строку:

try {
    byte b[] = serializedObject.getBytes(); 
    ByteArrayInputStream bi = new ByteArrayInputStream(b);
    ObjectInputStream si = new ObjectInputStream(bi);
    MatlabEngine matinst = (MatlabEngine) si.readObject();
 } catch (Exception e) {
    System.out.println(e);
 }
...