In J2ME heb ik een programma wat een TCP verbinding opbouwdt waaraan gewoon een InputStream hangt. Uit deze InputStream wil ik vervolgens characters uitlezen en hiervoor gebruik ik dus een InputStreamReader..
Nu weet ik via available() van de InputStream hoeveel bytes er beschikbaar zijn. Het gaat hier echter om characters, en aangezien het UTF-8 is als het goed heb, kan 1 character meerdere bytes zijn.
Het probleem is dus dat ik voordat ik de read(char[]) functie van de InputStreamReader ga gebruiken ik geen idee heb hoe groot ik deze char[] moet maken!
1 Oplossing die ik kan bedenken is char[] aanmaken met de grote van het aantal bytes dat available() teruggeeft, daarmee een read(char[]) doen en vervolgens een nieuwe char[] aanmaken met de grote die read(char[]) terug geeft. En dan de gebruikte inhoud van de char[] die gebruikt is read(char[]) daarin kopieren:
als iemand een betere oplossing of effectivere manier heeft please let me know
Enige andere waar ik op kan komen is een eigen soort InputStreamReader maken die char[]'s teruggeeft ipv naar char[] kopieert maar dan moet ik moet UTF-8 aan de slag enz. enz.
misschien dat iemand dit al eens gedaan heeft of een linkje weet naar iets soortgelijks..
Nu weet ik via available() van de InputStream hoeveel bytes er beschikbaar zijn. Het gaat hier echter om characters, en aangezien het UTF-8 is als het goed heb, kan 1 character meerdere bytes zijn.
Het probleem is dus dat ik voordat ik de read(char[]) functie van de InputStreamReader ga gebruiken ik geen idee heb hoe groot ik deze char[] moet maken!
1 Oplossing die ik kan bedenken is char[] aanmaken met de grote van het aantal bytes dat available() teruggeeft, daarmee een read(char[]) doen en vervolgens een nieuwe char[] aanmaken met de grote die read(char[]) terug geeft. En dan de gebruikte inhoud van de char[] die gebruikt is read(char[]) daarin kopieren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| // ff uit m'n hoofd dit allemaal hoop dat er geen vouten // in zitten :P // in = InputStream van de socket; InputStreamReader inr = new InputStreamReader(in); /* .. code die ervoor zorgt dat gewacht wordt tot er daadwerklijk data is enz. */ char[] acData = new char[in.available()]; int iRead = inr.read(acData); char[] acReadData = char[iRead]; // hier komt het kopieren wat ik dus niet wil omdat het // teveel performance kost, al je data 1 keer voor niks // kopieren! for (k=0; k<iRead; k++) acReadData[k]=acData[k]; // acData kan nu weer vrijgemaakt worden.. |
als iemand een betere oplossing of effectivere manier heeft please let me know
Enige andere waar ik op kan komen is een eigen soort InputStreamReader maken die char[]'s teruggeeft ipv naar char[] kopieert maar dan moet ik moet UTF-8 aan de slag enz. enz.
Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com