Re: Getting Applet into Flash ROM?

Mark Wolforth <[email protected]>
Newsgroups gmane.comp.hardware.microcontrollers.tini
Message-ID <[email protected]>
Hi Anguel,

The disadvantage of base64 coding is that the coded result is about 33% 
bigger than the original.  The method I used only adds extra coding for 
what actually needs to be coded - not the whole thing.

Cheers,
Mark.


zer0flag wrote:

> Hi Mark!
>
> I checked out the problem with the encoding. One can also use Base64
> encoding, wich is a kind of standart for doing such things.
> Here is a link with java code examples:
> http://mindprod.com/jgloss/base64.html
>
> Thanks once again for your help!
>
> Regards,
> Anguel
>
> Mark Wolforth wrote:
>
>>
>> Hi Anguel,
>>
>> Good point.  Converting the original binary data to a string can have 
>> a few pitfalls.  Java does lots of fancy character set conversions to 
>> make internationalization easy, but these can mess things up when all 
>> you want is the raw data.  I went through a lot of trial and error to 
>> find something that worked.  For example, you can do without the 
>> try{}catch{} block around the string declaration I posted before - it 
>> was left over from attempts to use different Java character encoding.
>>
>> What I did in the end was use the default encoding and escape the 
>> characters that don't exist.  A code snippet for doing this, where 
>> "out" is some output stream and "in" is the input stream would be:
>>
>>    c = in.read();
>>    while (c != -1) {
>>        // Things that need to be escaped
>>        if (c == '"') {
>>            out.write ('\\');
>>            out.write ('"');
>>        } else if (c == '\\') {
>>            out.write ('\\');
>>            out.write ('\\');
>>        } else if (c == '\n') {
>>            out.write ('\\');
>>            out.write ('n');
>>        } else if (c == '\r') {
>>            out.write ('\\');
>>            out.write ('r');
>>        } else {
>>            // Escape characters that don't fit in
>>            // ISO8859-1 encoding.
>>            if (((c & 0x0FF) >= 128) && ((c & 0x0FF) <= 159)) {
>>                out.write ('\\');
>>                out.write ('u');
>>                out.write ('0');
>>                out.write ('0');
>>                temp = (c & 0x0F0) >> 4;
>>                if (temp < 10) {
>>                    out.write (temp + '0');
>>                } else {
>>                    out.write (temp - 10 + 'A');
>>                }
>>                temp = c & 0x0F;
>>                if (temp < 10) {
>>                    out.write (temp + '0');
>>                } else {
>>                    out.write (temp - 10 + 'A');
>>                }
>>            } else {
>>                out.write ((byte)(c & 0x0FF));
>>            }
>>        }
>>        c = in.read();
>>    }
>>
>> There may be a better way to do it, but the above has worked fine for 
>> me for a while.
>>
>> Mark.
>>
>> zer0flag wrote:
>>
>>> Hi Mark!
>>>
>>> Thank you very much for your help! I like this approach! Maybe it's 
>>> not as elegant and efficient as the solution in assembler, but the 
>>> filesystem is built only once at startup so it should be enough for 
>>> most of us.
>>> I just wanted to ask you how you put the string into Java. Just copy 
>>> and paste from a text editor or do I have to make some special 
>>> preparations? What about encoding? Thanks once again for your help!
>>>
>>> Best regards,
>>> Anguel
>>>
>>> Mark Wolforth wrote:
>>>
>>>>
>>>> Hi,
>>>>
>>>> I've done this entirely in Java by storing the data as a string and 
>>>> then using the getBytes() method to extract the bytes back.  A 
>>>> String is the most data efficient way to do this in Java since all 
>>>> other array types add code to set up the array itself.  As an 
>>>> example, you could have a class like:
>>>>
>>>> class Web_applet {
>>>>    public byte[] JARfile;
>>>>    public web_applet() {
>>>>    try {
>>>>        JARfile = "­-Þd;o³õÃݶ¡¸Ç6ï´ÍÀ»l'bض\u0".getBytes();
>>>>    } catch (Throwable _) {}
>>>>    }
>>>> }
>>>>
>>>> and then extract the data with something like:
>>>>
>>>> private static final void CreateAppletJAR() {
>>>>    FileOutputStream jarfile;
>>>>    try {
>>>>        jarfile = new FileOutputStream (new File("Applet.jar"));
>>>>        Web_applet applet = new Web_applet();
>>>>        jarfile.write (applet.JARfile, 0, applet.JARfile.length);
>>>>        jarfile.close();
>>>>    } catch (Throwable t) {
>>>>        System.out.println ("Error creating web applet JAR file.");
>>>>        System.out.println (t);
>>>>    }
>>>> }  // End of CreateAppletJAR()
>>>>
>>>> Watch out for the 64K class limit size.  If you hit up against this 
>>>> you'll need to create multiple classes to hold your data.
>>>>
>>>> Good luck,
>>>> Mark.
>>>>
>>>>
>>>> _______________________________________________
>>>> TINI mailing list
>>>> TINI-6tN4nzCoH/[email protected]
>>>> To UNSUBSCRIBE, edit your profile, or see list archives:
>>>> http://lists.dalsemi.com/mailman/listinfo/tini
>>>>
>>>>
>>>
>>
>> _______________________________________________
>> TINI mailing list
>> TINI-6tN4nzCoH/[email protected]
>> To UNSUBSCRIBE, edit your profile, or see list archives:
>> http://lists.dalsemi.com/mailman/listinfo/tini
>>
>>
>
>

_______________________________________________
TINI mailing list
TINI-6tN4nzCoH/[email protected]
To UNSUBSCRIBE, edit your profile, or see list archives:
http://lists.dalsemi.com/mailman/listinfo/tini
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.