Lesen vom InputStream mit lese-und IOUtils.kopieren
Ich versuche, 2 Ansätze, um Sie zu Lesen InputStream
via Bluetooth socket.
Die erste ist:
InputStream inputStream = bluetoothSocket.getInputStream();
byte[] buffer = new byte[1024];
inputStream.read(buffer);
String clientString = new String(buffer, "UTF-8");
Das problem mit diesem ist, dass jetzt in clientString
es ist das original-Nachricht plus "0" bis der Puffer voll ist (kann ich wissen, die Länge der Nachricht, wenn ich verwende das erste Byte als Indikatoren, aber ich versuche nicht zu).
Die zweite ist (Mit IOUtils
Klasse aus Apache Commons IO
):
InputStream inputStream = bluetoothSocket.getInputStream();
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, "UTF-8");
String clientString = writer.toString();
Das problem mit diesem ist, dass es bleibt auf der copy
Linie und nie weiter über diesen Punkt hinaus.
So, meine Frage ist, was ist der Unterschied zwischen diesen Ansätzen und warum erhalte ich unterschiedliche Ergebnisse?
Den code auf der client-Seite (C# Mit 32feet
):
client.Connect(BluetoothEndPoint(device.DeviceAddress, mUUID));
bluetoothStream = client.GetStream();
if (client.Connected == true && bluetoothStream != null)
{
byte[] msg = System.Text.Encoding.UTF8.GetBytes(buffer + "\n");
bluetoothStream.Write(msg, 0, msg.Length);
bluetoothStream.Flush();
}
InformationsquelleAutor SharonKo | 2014-11-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich vermute, dass IOUtils Klasse aus der Apache-Commons-IO. Kopien aus inputStream zum Schriftsteller, bis er das Ende des Streams (-1 zurückgegeben wird von der read-Methode auf stream). Ihre erste Methode, die einfach zu Lesen versucht, das maximum von 1024 bytes und geht dann.
Auch den inputStream.read(buffer) zurück, die Anzahl der gelesenen bytes. Also, wenn Sie erstellen Ihren Text können Sie:
Müssen Sie auch zu prüfen, ob die read-Methode gibt -1 zurück, der angibt, dass das Ende des Streams erreicht ist.
Das könnte abhängig von der Implementierung des InputStream, z.B. Rückkehr der bytes, die er hält derzeit in den Puffer. Es gibt keine Verpflichtung zu Lesen, um den vollen Puffer.
InformationsquelleAutor Zoran Regvart