我正在处理与Android的蓝牙连接,我想要读取InputStream缓冲区,直到我得到一些特定字符,如' \ n' (新行)或任何其他字符并保持缓冲区不变,然后再次读取以下字节,直到读取相同的字符,以便将它们放在单独的字符串中。我尝试了几种没有成功的方法,有人可以帮助我吗?
我用来获取数据的代码如下
public String getData() {
try {
inStream = btSocket.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
inStream.read(inString);
}
catch (IOException e){
e.printStackTrace();
}
String str= new String(inString, StandardCharsets.UTF_8);
return str;
}
答案 0 :(得分:1)
如果您想要阅读,直到找到特定的char
,
一个解决方案可能是这样的:
public static String readUntilChar(InputStream stream, char target) {
StringBuilder sb = new StringBuilder();
try {
BufferedReader buffer=new BufferedReader(new InputStreamReader(stream));
int r;
while ((r = buffer.read()) != -1) {
char c = (char) r;
if (c == target)
break;
sb.append(c);
}
System.out.println(sb.toString());
} catch(IOException e) {
// Error handling
}
return sb.toString();
}
答案 1 :(得分:0)
最后,我得到了一个解决方案。我不知道它是否是最佳的,但它运作正常。我发布代码,以防其他人有用。谢谢你的回复。
通过char获取输入流char的函数:
public char getData() {
try {
inStream = btSocket.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
inStream.read(inString,0,1);
}
catch (IOException e){
e.printStackTrace();
}
String str= new String(inString, StandardCharsets.UTF_8);
inChar=str.charAt(0);
return inChar;
}
在角色'&'时获取所需字符串的功能。出现:
public void procesChar(char inChar){
if(inChar=='&'){
String str=new String(charBuffer);
countBytes=0;
Arrays.fill(charBuffer,(char)-1);
}
else {
charBuffer[countBytes] = inChar;
countBytes++;
}
}