Ver Fonte

Update weka.js

Lutz Roeder há 5 anos atrás
pai
commit
45f6d03d89
1 ficheiros alterados com 10 adições e 11 exclusões
  1. 10 11
      source/weka.js

+ 10 - 11
source/weka.js

@@ -10,8 +10,7 @@ weka.ModelFactory = class {
 
     match(context) {
         try {
-            const buffer = context.stream.peek();
-            const reader = new java.io.InputObjectStream(buffer);
+            const reader = new java.io.InputObjectStream(context.stream);
             const obj = reader.read();
             if (obj && obj.$class && obj.$class.name) {
                 return true;
@@ -25,8 +24,7 @@ weka.ModelFactory = class {
 
     open(context /*, host */) {
         return Promise.resolve().then(() => {
-            const buffer = context.stream.peek();
-            const reader = new java.io.InputObjectStream(buffer);
+            const reader = new java.io.InputObjectStream(context.stream);
             const obj = reader.read();
             throw new weka.Error("Unsupported type '" + obj.$class.name + "'.");
         });
@@ -45,18 +43,19 @@ java.io = {};
 
 java.io.InputObjectStream = class {
 
-    constructor(buffer) {
+    constructor(stream) {
         // Object Serialization Stream Protocol
         // https://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/guide/serialization/spec/protocol.doc.html
-        this._reader = new java.io.InputObjectStream.BinaryReader(buffer);
-        this._references = [];
-        if (buffer.length < 5) {
+        if (stream.length < 5) {
             throw new java.io.Error('Invalid stream size');
         }
-        const signature = this._reader.uint16();
-        if (signature !== 0xACED) {
-            throw new java.io.Error('Invalid signature.');
+        const signature = [ 0xac, 0xed ];
+        if (!stream.peek(2).every((value, index) => value === signature[index])) {
+            throw new java.io.Error('Invalid stream size');
         }
+        this._reader = new java.io.InputObjectStream.BinaryReader(stream.peek());
+        this._references = [];
+        this._reader.skip(2);
         const version = this._reader.uint16();
         if (version !== 0x0005) {
             throw new java.io.Error("Unsupported version '" + version + "'.");