Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中从inputStream读取每个字符串_Java_String_Inputstream - Fatal编程技术网

如何在java中从inputStream读取每个字符串

如何在java中从inputStream读取每个字符串,java,string,inputstream,Java,String,Inputstream,我正在尝试通过蓝牙将加速器值从Android应用程序发送到PC。我正在开发BluetoothChat演示应用程序。在Android应用程序中,我有一个名为onSensorChanged的方法,每次加速度变化时都会调用该方法。该方法如下所示: @Override public void onSensorChanged(SensorEvent e) { // the work done when the accelerometer data changes try {

我正在尝试通过蓝牙将加速器值从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应用程序中检索发送的每一组字符串

试试这个

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

msg=br.readLine()

这将解决问题

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,这很容易理解,但我实际上正在尝试获取一个字符串并使用它做一些工作。我检查了scanner方法,hasNextString丢失了。有什么建议吗?谢谢你的回复,这正是我所需要的。我唯一需要更改的是onSensorChanged方法,我必须在其末尾添加以下内容:mChatService.writeFromString(“\n”);这样我就可以正确地阅读每一行。否则,输入流就是一大行VAL字符串。多谢各位。它正在按预期工作