Android InputStream。读取缓冲区直到特定字符

时间:2015-11-01 20:35:17

标签: java android inputstream

我正在处理与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;
}

2 个答案:

答案 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++;
        }
    }