gpt4 book ai didi

java - 有没有一种方法可以将 InputStream 数据解码为文本,而无需在 InputStream 对象本身上使用流解码器?

转载 作者:行者123 更新时间:2023-12-02 09:58:24 27 4
gpt4 key购买 nike

我制作了一个蓝牙输入流监听器,只需询问 if(InputStream.isAvailable > 0) 即可检查是否有传入数据,然后创建一个循环将传入数据存储到 int[] 直到没有更多并且它工作完美。我使用一个简单的 Log.d 记录器来输出结果。我还是一个初学者,可以理解基本概念。通过蓝牙设备发送到手机的文本是 “Hello Android!”,但它被编码为整数,我想将 int[] 转换为String 这样我就可以获取编码文本而不必使用流解码器,而是使用整数。是否可以?按预期工作的实际输出如下所示:72, 101, 108, 111, 32, 65, 110, 100, 114, 111, 105, 100, 33, 13, 10,。当然,它们不会同时到达,因为它们是被一一发送的,这没什么好担心的,因为我将使用自己的分隔符来确定整个数据的开始和结束。

我的代码:

if(mmInputStream.available() > 0) {

int[] receivedBytes = new int[1024];
int i = 0;

while(mmInputStream.available() > 0) {
receivedBytes[i] = mmInputStream.read();
i++;
}

String s = "";

for(int j = 0; j < i; j++){
s += receivedBytes[j] + ", ";
}

Log.d("INPUTSTREAM_DATA", s);

}

我这样做的原因是,一旦发送完一个 session 数据,就立即输出传入的数据。

最佳答案

可怕的代码。不要使用这样的单字符读取功能 - 这是非常低效的。确定缓冲区大小并使用字节数组版本。然后,您可以通过 new String(array,encoding) 将整个字节数组转换为字符串,其中编码是数据的编码(UTF-8、UTF-16 等)。

并且不要使用 + 来连接这样的字符串 - 字符串是不可变的,因此每次使用都会导致创建一个新对象。请改用 StringBuilder。更好的代码看起来像这样(忽略所需的异常处理)

int BUFFER_SIZE = 1024;
StringBuilder builder = new StringBuilder();
byte data[] = new byte[BUFFER_SIZE];
while(inputStream.available() > 0) {
int read = inputStream.read(data);
builder.append(new String(data, 0, read, "UTF-8"));
}
return builder.toString();

关于java - 有没有一种方法可以将 InputStream 数据解码为文本,而无需在 InputStream 对象本身上使用流解码器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com