Infos zum Bluetooth Buffer und dem Einlesen von Daten

  • Hallo,
    was hat das Android Gerät für einen Bluetooth Buffer? Also wenn ich die Daten über


    bytes = mmInStream.read(buffer);
    byte[] readBuf = (byte[]) buffer;
    String strIncom = new String(readBuf, 0, bytes);


    einlese, dann waren die Daten ja vorher in einem Android eigenen Buffer. Wie groß ist dieser?
    Wenn ich permanent Daten schicke und nicht abrufe müsste der ja irgendwann überlaufen.


    Die zweite Frage: Wenn ich die Daten anschließend auf einen Inhalt überprüfe mit


    if (cmplStrIncom.contains("test")) {...}


    und dem Gerät das Wort test schicke, dann reagiert es nicht immer. Woran liegt das?
    Wenn ich zB nur t schicke funktioniert es immer.

  • Grundlagen Netzwerkkommunikation. :)


    Wie groß der Buffer ist dürfte Dir eigentlich vollkommen egal sein.


    Du bekommst es über buffer.capacity() heraus und kannst davon ausgehen, dass es beim nächsten Gerät anders aussieht.
    Im Prinzip ist die Größe des Buffers für Dich also wie gesagt völlig egal.


    Diese Buffer haben die Eigenschaft, nicht überlaufen zu können. Sollten sie 'zu voll' laufen, wird einfach Altes ersetzt.


    Wann immer möglich musst Du den Buffer also auslesen und bearbeitest die Informationen idealerweise auch gleich.


    Zur zweiten Frage: das liegt daran, wie die Daten übertragen werden. Du hast absolut keinen Einfluss darauf, wie diese Daten übertragen werden.
    Eventuell ist Bluetooth so konfiguriert, dass lieber viele viele kleine Pakete als wenige große Pakete verschickt werden.
    Dank TCP/IP wird Dir zwar garantiert, dass die Pakete alle ankommen und zwar in der Reihenfolge, in der sie verschickt wurden, doch über die Art und Weise dieses Ankommens wird Dir nichts garantiert. Es kann also beispielsweise auch einige Sekunden zwischen 'te' und 'st' geben.


    Wie dem auch sei, Du solltest Dir für die Übertragung ein bestimmtes Datenschema ausdenken. Es hat sich eine Kombination aus Startsequenz, Längenangabe, Wert und Endsequenz etabliert.
    Wenn Du eine Startsequenz erhältst kannst Du danach die Längenangabe auswerten, dann den Wert bis zur Endsequenz.
    Natürlich musst Du noch ein paar Logikprüfungen einbauen. Stimmt die Längenangabe mit der Länge des Wertes überein?


    Wann immer Du ein komplettes Paket von Start- bis Endsequenz erhalten hast, kannst Du den temporären Wert als fertigen Wert nehmen und auswerten.
    Natürlich ist das Ganze etwas aufwändig, weshalb so etwas eher in einen Hintergrundthread gehört.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Vielen Dank für die ausführliche Antwort. Frage 2 ist damit beantwortet :)



    Zu 1: Mir geht es darum, dass ich sicher gehen möchte, dass in Zeiten großer Auslastung trotzdem keine Daten verloren gehen.
    Und das wäre ja der Fall wenn Altes ersetzt wird. Wie genau geht das mit buffer.capacity() für den Android eigenen Buffer?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!