BufferedReader 的输出正在改变位
Output of BufferedReader is changing the bits
所以我的应用程序将 Android 连接到另一台设备并通过 wifi sends/receives 串行数据。它能够完美地连接、断开和传输数据,但是,当接收到数据时,会发生这种情况...
我知道传输设备可以正常工作并且没有发送错误数据。
有人知道为什么会发生这种情况或如何预防吗?
我能确定的唯一字节是 0x05。
传入位:11111111 11111101
输入位:00000000 00001100
传入位:11111111 11111101
输入位:00000000 00111101
传入位:11111111 11111101
输入位:00000001 00010011
输入位:00000000 00111101
输入位:11111111 11111101
private void asyncRead()
{
BufferedReader tIn = null;
try
{
tIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e)
{
e.printStackTrace();
}
while (true)
{
char[] tBuffer = new char[500];
int tNumberOfChars = 0;
try
{
tNumberOfChars = tIn.read(tBuffer);
} catch (IOException e)
{
e.printStackTrace();
}
if (tNumberOfChars <= 0) continue;
byte[] tBytes = new byte[tNumberOfChars];
for (int i = 0; i < tBytes.length; ++i)
{
Log.d(TAG, "Incoming Bits: " + Utilities.bitStringFromChar(tBuffer[i]));
}
publishProgress(tBytes);
}
}
使用 byte[]
缓冲区和 BufferedInputStream
如果您希望按位标识。 BufferedReader
用于当您知道数据是文本并且希望将其转换为 UTF-16 时使用。在这种情况下,你不需要。
注意:
- 依赖于
try
块中代码成功的代码应该在 try
块内。
- 您分配了
tBytes
,然后什么也没放入。我无法想象为什么。
所以我的应用程序将 Android 连接到另一台设备并通过 wifi sends/receives 串行数据。它能够完美地连接、断开和传输数据,但是,当接收到数据时,会发生这种情况...
我知道传输设备可以正常工作并且没有发送错误数据。
有人知道为什么会发生这种情况或如何预防吗?
我能确定的唯一字节是 0x05。
传入位:11111111 11111101
输入位:00000000 00001100
传入位:11111111 11111101
输入位:00000000 00111101
传入位:11111111 11111101
输入位:00000001 00010011
输入位:00000000 00111101
输入位:11111111 11111101
private void asyncRead()
{
BufferedReader tIn = null;
try
{
tIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e)
{
e.printStackTrace();
}
while (true)
{
char[] tBuffer = new char[500];
int tNumberOfChars = 0;
try
{
tNumberOfChars = tIn.read(tBuffer);
} catch (IOException e)
{
e.printStackTrace();
}
if (tNumberOfChars <= 0) continue;
byte[] tBytes = new byte[tNumberOfChars];
for (int i = 0; i < tBytes.length; ++i)
{
Log.d(TAG, "Incoming Bits: " + Utilities.bitStringFromChar(tBuffer[i]));
}
publishProgress(tBytes);
}
}
使用 byte[]
缓冲区和 BufferedInputStream
如果您希望按位标识。 BufferedReader
用于当您知道数据是文本并且希望将其转换为 UTF-16 时使用。在这种情况下,你不需要。
注意:
- 依赖于
try
块中代码成功的代码应该在try
块内。 - 您分配了
tBytes
,然后什么也没放入。我无法想象为什么。