Java inputstream read()没有得到完整的字节数组数据

时间:2015-03-19 11:33:22

标签: java bluetooth embedded inputstream

嵌入式系统项目,我将使用蓝牙模块从我的微控制器到Android设备获得一些响应,我无法从此行bytes = "mmInStream.read(buffer)"获取字节。 当我使用这个将byte []缓冲区转换为String时 String data=new String(bytes)我没有得到我从微控制器发送的数据。有时人格不足......

     public void run() {
        Log.i(TAG, "BEGIN mConnectedThread");
        byte[] buffer = new byte[1024];
        int bytes;

        // Keep listening to the InputStream while connected
        while (true) {
            try {
                // Read from the InputStream
                bytes = mmInStream.read(buffer);

                String data=new String(bytes);         
                System.out.println(data);          

                // Send the obtained bytes to the UI Activity

            } catch (IOException e) {
                Log.e(TAG, "disconnected", e);
                connectionLost();
                break;
            }
        }
    }

请帮帮我

1 个答案:

答案 0 :(得分:0)

尝试使用BufferedReader代替。

  

它从字符输入流中读取文本,从而缓冲字符   为了提供有效的字符,数组和   线。

如果您使用Java 7或更早版本,以下代码将有所帮助:

try (BufferedReader reader = new BufferedReader(new InputStreamReader(mmInStream))){
        String line = null;
        while((line = reader.readLine()) != null) {
        System.out.println(line);
        }
        connectionLost();
    } catch(IOException e) {
        e.printStackTrace();
    }

如果您使用Java 6或更低版本而不是使用此代码:

BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(mmInStream));
        String line = null;
        while ((line = reader.readLine()) != null) {
        System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        }
        connectionLost();
    }

但这种方法有缺点。你可以阅读它们,例如here