【发布时间】:2016-04-13 18:55:16
【问题描述】:
从InputStream一次读取13个字节直到帧结束字符0xEE被读取并将数据解析为Integer和float的最有效方法是什么。实际数据是 4 字节长,所以有 3 个 4 字节长的数据,然后是帧结束字符。
private final InputStream mmInStream;
public void run() {
BufferedInputStream bInputStream = null;
DataInputStream dInputStream = null;
byte[] buffer;
byte readByte = 0;
int i = 0, bytesAvailable = 0;
bInputStream = new BufferedInputStream(mmInStream);
dInputStream = new DataInputStream(bInputStream);
// Keep listening to the InputStream while connected
while (true) {
try {
bytesAvailable = dInputStream.available();
if(bytesAvailable > 0) {
buffer = new byte[bytesAvailable];
Log.d(getClass().getName(), String.format("value = %d", bytesAvailable));
do {
readByte = dInputStream.readByte();
buffer[i] = readByte;
i++;
} while(readByte == 0xEE);
threadHandler.obtainMessage(BluetoothClientActivity.MESSAGE_READ, bytesAvailable, -1, buffer).sendToTarget();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
只有一种方式来读取单个字节。这也使它成为最有效的方法,通过从一组大小为 1 的选项中选择的简单逻辑,总是会产生一个选项。问的意义何在?
-
我是 Java 新手,所以请确认一下。
-
好的,但是在开始学习时,效率应该是您最不关心的问题,真的。首先担心结果的正确性,您可以稍后担心其他任何事情。只有当它被证明是一个问题时才担心效率:“过早的优化是万恶之源” - 当你甚至在编写任何代码之前就开始担心时尤其如此。
标签: java android inputstream