Originariamente inviato da bmw
Il problema è che quando converto in stringa mi ritorna qualcosa del tipo: "[B@8813f2"

sto sbagliando la conversione !?!??!
Sì. Perché hai invocato toString() su un array. Gli array non ridefiniscono toString() ... rimane e viene usata la implementazione in Object, che fornisce quella stringa in quel formato (non potendo fare altro di più specifico).

Se da un array di byte vuoi ottenere un String, non devi usare toString() ma usare uno dei costruttori di String che riceve un byte[]. Ma sopratutto devi tenere presente che quando si converte un String in sequenza di byte (o viceversa) bisogna anche tenere presente la questione del "charset". In quella tua sequenza di byte i caratteri con quale charset sono codificati? ASCII? UTF-8? ISO-8859-1? O uno dei vari "codepage"?

Insomma, vedi i costruttori di String.

Originariamente inviato da bmw
p.s. il programma mi occupa la CPU al 100%, da cosa può dipendere ??
La mia deduzione è che sia dovuto al ciclo in cui testi il risultato di available(). Questo metodo fornisce una "stima" di quanti byte si possono leggere senza che si blocchi per attendere i dati. In pratica quanti byte sono disponibili per poter essere letti subito, immediatamente.

Visto che le seriali sono lente, il available() probabilmente ritorna spesso 0 e quindi il tuo codice è in continuo "loop" per attendere dati (= consuma CPU).

No. Non usare available(), usa direttamente read(), che "sospende" il thread in attesa di dati se necessario (e non lo tiene occupato in loop inutili!).

Ma c'è ancora un'altra cosa da notare. Tu hai un buffer fisso di 50 byte. Ok. Tu passi alla read() questo buffer ma la read() NON è detto che riempia sempre tutto il buffer. Morale della favola: devi sempre tenere in considerazione il valore di ritorno di read() perché esso ti dice quanti byte sono davvero quelli "utili" nel buffer.

Ripeto che non so quale charset viene usato per codificare i caratteri che ricevi ma se il charset fosse uno di quelli multibyte sarebbe pure sbagliato prendere blocchetti di lunghezza arbitraria/sconosciuta (non sai quanti byte ritorna read()) e convertire ognuno in String. Perché rischi di spezzare una sequenza di più byte che codifica 1 singolo carattere. Se il charset è single-byte, andrebbe bene.

Concludo dicendo che dovresti considerare di più di queste questioni.