PDA

Visualizza la versione completa : [java] InputStreamReader solo se J2SDK?


rinosan_76
22-07-2003, 19:56
Ciao a tutti, ho fattu un'applet (http://www.akkattp.com/classes/AKKATTPproxy.html ) che mi legge il risultato di una pag asp, e sul mio pc funziona, solo che ho notato che su un pc senza la VM aggiornata il tutto non si vede.
Mi sapete aiutare a cambiare queste righe di codice (penso sia li l'errore!



....

URL url = new URL(host);
inputstream = (url).openStream();
in = new BufferedReader(new InputStreamReader(inputstream));
String line;

while ((line = riceviMessaggio())!=null){
....
}

private String riceviMessaggio() {
String line = null;
try {
line = in.readLine();
} catch (IOException e) {}
return line;
}



Avrei bisogno di usare una classe (pensavo ad InputStream) pi vecchia ma non so ritornare una stringa da questa.
Sapete aiutarmi?
Grazie

rinosan_76
23-07-2003, 15:39
...aiuto please...

roberman
23-07-2003, 22:19
Ciao,
tutte le classi che stai usando esistono gia' dal jdk 1.1 ...
Possibile che sia un problema di VM !?

Comunque se vuoi leggere lo stream diversamente puoi fare cosi':

URL url = new URL(host);
inputstream = (url).openStream();

int aByte= -1;
ByteArrayOutputStream baos= new ByteArrayOutputStream();

try{
while((aByte= inputSTream.read())!= -1){
baos.write(aByte);
}
}catch(IOEXception ex){
}

String aSTring= new String(baos.toByteArray());
System.out.println(aString);


Certo, non e' bufferizzato, leggi byte per byte, e' bloccante, pero' puoi provare
:)

Ciao,
rob

Lancill
23-07-2003, 22:59
con la JVM di Microsoft non funziona l'applet restituendo un errore Class Not Found!!
Con quella di Sun tutto liscio...

rinosan_76
24-07-2003, 01:24
me n'ero accorto anch'io... il problema sta proprio li... devo trovare un qualcosa che vada dovunque.
Come si fa a sapere che vm ha il browser winzozz? IE 4.0 che VM usa?

Lancill
24-07-2003, 01:31
non ti saprei dire, per me cmq un problema della JVM di Microsoft che non si aggiornata...
purtroppo non so dirti come rilevare il tipo di JVM installata... magari nel registro di Windows o in qualche file sono contenute delle info riguardo alla versione.

rinosan_76
24-07-2003, 02:10
mi puoi testare questo link ( quello con il codice per le VM pi vecchie)
http://www.akkattp.com/classes/AKKAttpRemote.htm

roberman non sai se possibile bufferizzare quel tuo codice?
Che differenza ce sui 2 sistemi (buffer si/no) sulla lettura di circa 3000 caratteri secondo te?

Lancill
24-07-2003, 02:15
ok con JVM di Sun, quella di Microsoft ormai l'ho buttata, adesso non ce l'ho su nessun pc...

roberman
24-07-2003, 09:41
puoi bufferizzarlo cosi':

URL url = new URL(host);
inputstream = (url).openStream();

byte[] toRead= new byte[30000];

try{

int bytesLetti= inputStream.read(toRead);

String aSTring= new String(toRead, 0, bytesLetti);
System.out.println(aString);

}catch(IOEXception ex){
ex.printStackTrace();
}


In questo modo leggi il blocco di 30.000 caratteri in un colpo solo.
Se ci fossero tanti thread che leggono, andrebbero in concorrenza per ogni byte letto, mentre in questo modo vengono "svegliati" solo quando l'array e' stato letto tutto...

ciao,
rob

rinosan_76
24-07-2003, 11:05
e se poi la stringa pi lunga di 30000 cosa succede la legge uguale?

Loading