[kepler-users] Size Limitation of ArrayTokens?
Stefan Proell
sproell at sba-research.org
Tue May 22 08:17:16 PDT 2012
Dear Hogan,
thanks for the hint.
I wrote my own Actor now that reads the whole file without requiring
caching.
Greetings,
Stefan
Am 2012-05-22 16:11, schrieb Hogan, D. (GE Energy):
> The org.geon.BinaryFileReader actor has a limit of 20,000 bytes per
> iteration. If you use that actor, you need to either process in up to
> 20,000 byte chunks or cache the results until the endOfFile port is
> true.
>
> Not all actors have this behavior. For instance,
> ptolemy.actor.lib.io.FileReader and
> org.resurgence.actor.SimpleFileReader read the entire file as a
> character stream and output a single string.
>
> -----Original Message-----
> From: kepler-users-bounces at kepler-project.org
> [mailto:kepler-users-bounces at kepler-project.org] On Behalf Of Stefan
> Proell
> Sent: Tuesday, May 22, 2012 10:05 AM
> To: kepler-users at kepler-project.org
> Subject: Re: [kepler-users] Size Limitation of ArrayTokens?
>
> Hi!
> There seems to be a problem with the buffer in the BinaryFileReader
> Class, which is limited to 20000 bytes, as you can see in the
> corresponding source file (line 277).
>
> /** The current bytes read. */
> protected byte[] bytesRead = new byte[20000];
>
> It only is reading this first 20000 bytes and does not proceed after
> this. I will have a closer look at ...
>
> Stefan
>
> Am 2012-05-22 15:12, schrieb Stefan Proell:
>> Dear Matt,
>> thanks for your example. It works fine, but does not solve my problem.
>> I use a Binary File Reader to read a file from my local disk. The
>> Binary File Reader reads a local file path or URL and outputs an array
>> of bytes. No matter what file I want to read, the array size is
>> exactly 20 000 (bytes). I attached a small sample workflow to
>> demonstrate this. It simply reads a file (in my testcase this file is
>> about 40 MB) and displays the length of the resulting Byte Array.
>>
>> Do you have any idea why this behaviour occurs and can your reproduce
> it?
>> Kind regards,
>> Stefan
>>
>>
>> Am 2012-05-21 19:05, schrieb Matt Jones:
>>> I also took a look, and tried a larger array -- the attached workflow
>>> processes 30K integers through an array and back out again, and works
>>> fine. So there isn't an inherent limit at 20K elements. So I'm not
>>> quite sure what's happening with yours, but maybe this will help to
>>> debug.
>>>
>>> Matt
>>>
>>>
>>> On Mon, May 21, 2012 at 8:32 AM, Christopher Brooks
>>> <cxh at eecs.berkeley.edu<mailto:cxh at eecs.berkeley.edu>> wrote:
>>>
>>> HI Stefan,
>>> A quick search of the web shows no apparent limits.
>>> A more complete test case would help.
>>>
>>> The way I would approach this is by splitting up the problem into
>>> first just reading the data and being sure that worked and then
>>> adding more like encoding.
>>>
>>> _Christopher
>>>
>>>
>>> On 5/21/12 9:20 AM, Stefan Proell wrote:
>>>
>>> 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
>>>
>>> _______________________________________________
>>> Kepler-users mailing list
>>> Kepler-users at kepler-project.org
>>> <mailto:Kepler-users at kepler-project.org>
>>>
> http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
>>>
>>> -- Christopher Brooks, PMP University
>>> of California
>>> CHESS Executive Director US Mail: 337 Cory
> Hall
>>> Programmer/Analyst CHESS/Ptolemy/Trust Berkeley, CA
>>> 94720-1774
>>> ph: 510.643.9841<tel:510.643.9841>
>>> (Office: 545Q Cory)
>>> home: (F-Tu) 707.665.0131<tel:707.665.0131> cell: 707.332.0670
>>> <tel:707.332.0670>
>>>
>>>
>>> _______________________________________________
>>> Kepler-users mailing list
>>> Kepler-users at kepler-project.org
>>> <mailto:Kepler-users at kepler-project.org>
>>> http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
>>>
>>>
>>
>>
>> _______________________________________________
>> Kepler-users mailing list
>> Kepler-users at kepler-project.org
>> http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
> _______________________________________________
> Kepler-users mailing list
> Kepler-users at kepler-project.org
> http://lists.nceas.ucsb.edu/kepler/mailman/listinfo/kepler-users
More information about the Kepler-users
mailing list