Netica 错误或压缩错误? "buffer to decompress gzip 'internal' is too small"
Netica error or compression error? "buffer to decompress gzip 'internal' is too small"
我在我的代码中使用 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 机器上坏了。
有什么想法吗?
我已经确定了问题。
我提到我之前读过贝叶斯网络,代码如下所示:
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 遇到此问题,请记住正确的操作顺序!
我在我的代码中使用 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 机器上坏了。
有什么想法吗?
我已经确定了问题。
我提到我之前读过贝叶斯网络,代码如下所示:
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 遇到此问题,请记住正确的操作顺序!