[kepler-users] Size Limitation of ArrayTokens?

Stefan Proell sproell at sba-research.org
Mon May 21 09:20:12 PDT 2012


Dear Mailing list,
I wrote my own Actor which I need in order to encode binary files via 
Base64 and pass the resulting encoded String to a REST Service. I feed 
the binary file with a BinaryFileReader-Actor to my encoding Actor and 
cast the Token to an Array, as I found no other solution to receive the 
bytes from the file. I then use a standard (and also deprecated) method 
for encoding the file first to Base64 and then send it through some 
URL-safe encoding. The method looks like this:


@Override
     public void fire() throws IllegalActionException {

         super.fire();

         // Read file from InputPort  and convert to a ByteArray
         ArrayToken inputToken = (ArrayToken) inputPort.get(0);
         byte[] inputBytes = 
ArrayToken.arrayTokenToUnsignedByteArray(inputToken);

         // Encoding
         String encode = new  String(Base64.encodeBase64(inputBytes));
         String encodedString = java.net.URLEncoder.encode(encode);

         output.send(0, new StringToken(encodedString));

     }

My problem is that the encoded file is truncated by the actor and hence 
not usable for further processing. There seems to be a limit of 20 000 
array elements (bytes), which is not sufficient for my purpose. Does 
anyone have an idea why the file is chopped off after 20k letters?

Thanks in advance,
Stefan



More information about the Kepler-users mailing list