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

Schreibe einen Kommentar