2016-04-13 7 views
-1

lesen zu lesen und zu analysieren, was die effizienteste Art und Weise 13 Bytes zu lesen von InputStream ein Byte zu einem Zeitpunkt, bis Ende des Rahmens char 0xEE gelesen würde und auch die Daten zu Integer und float zu analysieren. Die tatsächlichen Daten sind 4 Bytes lang, also gibt es drei 4 Bytes lange Daten und dann das Ende des Rahmen-Zeichens.Bester Weg Bytes von Input

private final InputStream mmInStream; 
public void run() { 

    BufferedInputStream bInputStream = null; 
    DataInputStream dInputStream = null; 
    byte[] buffer; 
    byte readByte = 0; 
    int i = 0, bytesAvailable = 0; 
    bInputStream = new BufferedInputStream(mmInStream); 
    dInputStream = new DataInputStream(bInputStream); 

    // Keep listening to the InputStream while connected 
    while (true) { 

     try { 
      bytesAvailable = dInputStream.available(); 

      if(bytesAvailable > 0) { 

       buffer = new byte[bytesAvailable]; 
       Log.d(getClass().getName(), String.format("value = %d", bytesAvailable)); 
       do { 
        readByte = dInputStream.readByte(); 
        buffer[i] = readByte; 
        i++; 
       } while(readByte == 0xEE); 

       threadHandler.obtainMessage(BluetoothClientActivity.MESSAGE_READ, bytesAvailable, -1, buffer).sendToTarget(); 

      } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Es gibt genau * eine Möglichkeit * zum Lesen einzelner Bytes. Dies macht es auch zur effizientesten Art und Weise, da eine einfache Logik aus einer Reihe von Optionen der Größe 1 immer diese eine Option ergibt. Was ist der Sinn zu fragen? – Durandal

+0

Ich bin neu in Java also nur gefragt, um sicher zu sein. – jakeheik90

+0

Ok, aber wenn du anfängst zu lernen * Effizienz * sollte dein * mindest * Problem sein, wirklich. Sorgen Sie sich zuerst um * Korrektheit * der Ergebnisse, Sie können sich um etwas anderes kümmern * später *. Sorgen Sie sich nur um die Effizienz, wenn es sich als Problem herausstellte: "Vorzeitige Optimierung ist die Wurzel allen Übels" - das gilt besonders, wenn Sie sich Sorgen machen, bevor Sie überhaupt einen Code geschrieben haben. – Durandal

Antwort

0

Wickeln Sie ein DataInputStream um einen BufferedInputStream um Ihre InputStream und nutzen die verschiedenen DataInputreadXXX() Methoden wie nötig.

+0

Vielen Dank für die Antwort. Ich habe den Hauptbeitrag mit dem Codeausschnitt bearbeitet. Ist es das, was du meintest? – jakeheik90