【问题标题】:Best way to read and parse bytes read from InputStream读取和解析从 InputStream 读取的字节的最佳方法
【发布时间】:2016-04-13 18:55:16
【问题描述】:

InputStream一次读取13个字节直到帧结束字符0xEE被读取并将数据解析为Integerfloat的最有效方法是什么。实际数据是 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


【解决方案1】:

DataInputStream 包裹在BufferedInputStream 周围,并根据需要使用各种DataInput readXXX() 方法。

【讨论】:

  • 感谢您的回复。我用代码 sn-p 编辑了主要帖子。你是这个意思吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 2015-07-31
  • 1970-01-01
相关资源
最近更新 更多