为什么在BluetoothChat中使用getBytes()方法

时间:2014-06-25 09:47:29

标签: java android

在BluetoothChat源代码中,我无法理解代码的某些部分 -

 private void sendMessage(String message) {

// Check that we're actually connected before trying anything
    if (mChatService.getState() != BluetoothChatService.STATE_CONNECTED) {
        Toast.makeText(this, R.string.not_connected, Toast.LENGTH_SHORT).show();
        return;
    }

// Check that there's actually something to send
if (message.length() > 0) {
    // Get the message bytes and tell the BluetoothChatService to write
    byte[] send = message.getBytes();
    mChatService.write(send);

    // Reset out string buffer to zero and clear the edit text field
    mOutStringBuffer.setLength(0);
    mOutEditText.setText(mOutStringBuffer);
}

}

在这里,我强调byte[] send是一个数组,但无法理解我为什么要初始化这个数组= message.getBytes();

可能是一个非常愚蠢的问题,但由于我是初学者所以我认为我应该清楚这一部分。 Java专家需要你的建议。

2 个答案:

答案 0 :(得分:0)

'send'必须是一个字节数组,因为mChatService.write()方法接受字节数组。 您可以在以下问题上阅读更多内容: Java Byte Array to String to Byte Array

答案 1 :(得分:0)

聊天服务发送二进制数据,即字节。

在java文本中(String,char,Reader / Writer)是一个黑盒子的Unicode文本,因此可以组合各种脚本和语言。

要获取特定编码的字节,请执行以下操作:

String s = "...";
byte[] b = s.getBytes(s, encoding);

这些字节在给定的编码中。

并逆转:

s = new String(b, encoding);

没有编码的String.getBytes()版本可能会导致错误:它使用默认的平台编码,该编码因计算机而异。

最好以Unicode格式返回字节,如UTF-8。

byte[] b = s.getBytes(StandardCharsets.UTF_8);