我正在尝试使用两种方法通过蓝牙套接字从InputStream
读取数据。
第一种方法是:
InputStream inputStream = bluetoothSocket.getInputStream();
byte[] buffer = new byte[1024];
inputStream.read(buffer);
String clientString = new String(buffer, "UTF-8");
这个问题在于,现在的
clientString
中会包含原始消息以及"0"直到缓冲区被填满(如果我使用前几个字节作为指示器,我可以知道消息的长度,但是我尽量避免这样做)。第二种方法是(使用Apache Commons IO中的
IOUtils
类):InputStream inputStream = bluetoothSocket.getInputStream();
StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, "UTF-8");
String clientString = writer.toString();
这个问题在于它停留在“复制”行,从这一点开始永远不会继续。 所以,我的问题是,这些方法之间有什么区别,为什么我得到了不同的结果?
客户端代码如下(使用C#和“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();
}