【问题标题】:how to read each string from the inputStream in java如何从java中的inputStream中读取每个字符串
【发布时间】:2012-12-04 10:49:57
【问题描述】:

我正在尝试通过蓝牙将加速器值从 Android 应用程序发送到 PC。我正在开发 BluetoothChat 演示应用程序。在 Android 应用程序中,我有一个名为 onSensorChanged 的​​方法,每次加速度变化时都会调用该方法。该方法如下所示:

@Override
public void onSensorChanged(SensorEvent e) {
    // the work done when the accelerometer data changes
    try {
        Thread.sleep(25);
    } catch (InterruptedException e1) {
        e1.printStackTrace();
    }
    sensorX = e.values[0];
    sensorY = e.values[1];

    Toast.makeText(BluetoothChat.this, "x coordinate = " + sensorX + "y coordinate = " + sensorY Toast.LENGTH_SHORT).show();

    BigDecimal sensorXDec = new BigDecimal(e.values[0]).setScale(2,BigDecimal.ROUND_HALF_UP);
    BigDecimal sensorYDec = new BigDecimal(e.values[1]).setScale(2,BigDecimal.ROUND_HALF_UP);


    String vals = String.valueOf(sensorXDec.toPlainString() + "," + sensorYDec.toPlainString()); 

    mChatService.writeFromString(vals);

}

方法writeFromString

    public void writeFromString(String temp){
    // Create temporary object
    ConnectedThread r;
    // Synchronize a copy of the ConnectedThread
    synchronized (this) {
        if (mState != STATE_CONNECTED) return;
        r = mConnectedThread;
    }
    // Perform the write unsynchronized
    r.writeString(temp);
}

而writeString方法如下:

        public void writeString(String out) {
        try {
                if(D) Log.d(TAG, "Sending File....AS STRING");
                mmOutStream.write(out.getBytes(), 0, out.getBytes().length);

        } catch (IOException e) {
            Log.e(TAG, "Exception during write", e);
        }
    }

下面的方法我在PC端处理inputStream

    @Override
public void run() {
    try {
        // prepare to receive data
        InputStream inputStream = mConnection.openInputStream();

        System.out.println("waiting for input");

        while (true) {
            int command = inputStream.read();

            if (command == EXIT_CMD)
            {   
                System.out.println("finish process");
                break;
            }
            processCommand(command);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

问题又是:如何检索我从 Android 应用程序发送的每组字符串?

【问题讨论】:

标签: java string inputstream


【解决方案1】:

试试这个

字符串 msg = null;
BufferedReader br = 新的 BufferedReader( 新的 InputStreamReader(inputStream) );

msg = br.readLine();

这会解决问题

【讨论】:

  • 嘿 Mohammod,这正是我所需要的。我唯一需要更改的是 onSensorChanged 方法,我必须在其末尾添加以下内容: mChatService.writeFromString("\n");这样我就可以正确阅读每一行。否则输入流是一大串 vals 字符串。十分感谢。它按预期工作
【解决方案2】:
Scanner scanner = new Scanner (inputStream);

while(true){
    if(!scanner.hasNextInt()){
        continue;
    }
    // at this point we've got an int, so get it and use it
    try{
        int commmand = scanner.nextInt();

        if (command == EXIT_CMD){
            System.out.println("finish process");
            break;
        }

        processCommand(command);
    } catch (Exception catchThem){
        // Deal with the caught exceptions
    }
}

我没有测试这个,希望它对你有用。

【讨论】:

  • 嘿,IGwe,这真的很容易理解,但我实际上是在尝试获取一个字符串并用它做一些工作。我检查了扫描仪方法并且缺少 hasNextString。有什么建议吗?谢谢回复
猜你喜欢
  • 2012-12-25
  • 1970-01-01
  • 2014-01-15
  • 2010-09-23
  • 2015-12-09
相关资源
最近更新 更多