Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    JAVA - RXTX e array Bytes che supera dimensione max

    Buongiorno a tutti

    ho il seguente problema:

    ho inviato un comando di write sulla seriale e vorrei memorizzare i bytes di risposta in un buffered o in un file per poterli elaborare successivamente.
    Ho provato ad usare BufferedOutputStream o BufferedReader ma non ci son riuscito.
    Qualcuno puo' aiutarmi?
    Se apro un terminale classico e mando il comando sulla seriale vedo che appena do invio incomincia ad arrivare una stringa enorme a video per circa 3 minuti.
    Perfetto io vorrei avere quella stringa in memoria in qualche maniera )

    Grazie per qualsiasi risposta

    Buon lavoro


    output.write(">GL??!\r\n".getBytes());

    Thread.sleep(180000);

    byte[] readBuffer = new byte[50];

    String value = new String(readBuffer);
    System.out.println("Response from Serial Device: "+ value);

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    147
    Hai dato uno sguardo agli esempi che ci sono nel wiki di RXTX? (http://rxtx.qbang.org/wiki/index.php/Examples )
    In ogni caso, come vedrai anche negli esempi, puoi semplicemente utilizzare uno dei tanti costruttori di String per memorizzare l'output che ti interessa...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    147
    P.S.: ma il dispositivo risponde dopo 180 secondi???

  4. #4

    eccomi...

    grazie per la risposta watermark

    si ho letto la documentazione rxtx....l'ho già usata altre volte per leggere e scrivere su seriale.

    ma questa volta son bloccato perchè appena mando il comando di scarico il mio logger parte

    e mi scarica una stringa di dati immensa (non avrei nessuna necessità di fare andare a SLEEP il thread)

    ho anche provato a fare partire un secondo thread e da console intercettare la risposta ma nada de nada.

    Grazie mille

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    147
    Ma qual'è il problema nel dettaglio? Cosa non va? Comunque penso che lo sleep() sia inutile e forse anche deleterio... Toglilo, poi utilizza un buffer di byte e copia in uno o più oggetti String... Inoltre incrementa la dimensione del buffer di byte (passa da 50 ad almeno 1024) oppure utilizzane più di uno...

    P.S.: tra l'altro, dal codice che hai postato non vedo la read() dallo stream...

  6. #6

    allora...

    allora ho provato a mettere:

    byte[] readBuffer = new byte[10000];

    ma vedo solamente una prima parte della stringa che invece è molto piu' grande.

    Adesso stavo provando a studiarmi i metodi:

    disableReceiveThreshold();
    disableReceiveTimeout();

    per capire se potevamo servirmi.

    Quindi tu mi proponi di utilizzare piu' volte il readbuffer e memorizzarli in vari oggetti stringa?

    Grazie mille per le risposte
    http://www.econorma.com

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    147
    Mi sembra abbastanza strano che la tua lettura non riesca a stare dietro ai dati che arrivano da una seriale... Scusa la domanda banale, ma dalle tue risposte mi sorge un dubbio: hai messo la read in un ciclo o la esegui una sola volta??

  8. #8

    scusa il ritardo

    allora eccomi....ho dovuto mettere un ciclo while infinito per leggere sta benedetta stringa...

    e ho risolto per il momento cosi':

    byte[] buffer = new byte[10000];
    int n;
    File f = new File("C:\\ricevitore_stronzo");
    FileUtils.deleteQuietly(f);
    while (true){
    if(inputStream.available()>=0){
    n = inputStream.read(buffer);
    if(n>0){
    String data = new String (buffer,0,n);
    // System.out.print(data);
    FileUtils.write(f, data, true);
    int length = data.length();
    if(length>2){
    System.out.print((int)data.charAt(length-2)+",");
    }
    if(length>1){
    System.out.println((int)data.charAt(length-1));
    }
    // if(data.endsWith("\n")){
    // System.out.println("saionara");
    // System.exit(0);
    // }
    }else{
    System.out.println("azz");
    }
    } else
    try {
    System.out.println("sleep");
    Thread.sleep(100);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    Grazie mille per la tua disponibilità

    Buona giornata
    http://www.econorma.com

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.