Нетика ошибка или ошибка сжатия? "буфер для распаковки gzip 'internal' слишком мал"

Я использую библиотеку Netica Java в своем коде для чтения в байесовской сети, ввода результатов и сохранения обновленной байесовой сети в байтовом массиве. Массив байтов прекрасно сохраняется (насколько я могу судить), но я не могу загрузить его обратно при использовании ByteArrayInputStream.

Мой код:

Environ env = new EnvironI( null );
ByteArrayInputStream bais = new ByteArrayInputStream( myBinaryData );
bais.close();
Net model = new Net( new Streamer( bais, "templateFile.neta", env );

Сбой в последней строке со следующей ошибкой:

stderr:  norsys.netica.NeticaException: 
**************  E R R O R  ***************
** ErrorNumber   = 2734
** ErrorSeverity = ERROR_ERR
** ErrorCategory = 
** ErrorMessage  = In function Net(Streamer inStream) constructor: buffer to decompress gzip 'internal' is too small (is 3082 but -981804177 needed)

Обратите внимание, что здесь есть конкретные приложения библиотеки Netica. Я также должен отметить, что это прекрасно работает на моей машине с OSX, но, похоже, работает на Linux.

Есть идеи?

1 ответ

Решение

Я определил проблему.

Я упоминал, что я прочитал в байесовской сети ранее, и этот код выглядит следующим образом:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
Streamer stream = new Streamer( baos, "myNetaFile.neta", env );
net.write( stream );
byte[] bytesToEncode = baos.toByteArray();
stream.flush();
String encoded = Base64.encodeBase64String( bytesToEncode );

Приведенный выше код на самом деле правильный. Бинарный файл как-то повредился, когда я читал его обратно. Моя проблема была в том, что у меня поменялись строки.toByteArray() и.flush().

Если кто-то еще сталкивается с этой проблемой, используя Netica, помните правильный порядок действий!

Другие вопросы по тегам