1

Bluetooth 経由でデバイスを組み込みチップに接続する Android アプリケーションを作成しています。Palm Pilot に既に存在するプログラム (C で記述) を基に設計をモデリングしています。コードを実行するために Bluetooth チャットの例を使用していますが、スタックしてしまいました。私はまだコーディングの世界全体にかなり慣れていないので、少し混乱しています。

次のコードを C から Java に変換したい....

SrmReceive(portId,&c,1,(t*5L*Sec)/1000L,&err)

ここで私が抱えている唯一の問題は、3 番目のパラメーターです。は、パーム ドキュメントに記載されているように を1表し、型はです。number of bytes to receiveUInt32

Bluetooth チャットの例のコードには、データを読み取るための次の関数があります...

            public void run() {
                Log.i( TAG, "BEGIN mConnectedThread" );
                buffer = new byte[1024];
                int bytes;

                // Keep listening to the InputStream while connected
                while( true ) {
                try {
                    // Read from the InputStream
                    bytes = mmInStream.read( buffer );

                    // Send the obtained bytes to the UI Activity
                    mHandler.obtainMessage( BtHelperHandler.MessageType.READ, bytes, buffer).sendToTarget();
                } catch ( IOException e ) {
                    Log.e( TAG, "disconnected", e );
                    sendErrorMessage( 1 );
                    break;
                }
            }
        }

run()読み取る特定のバイト数のパラメーターを持つようにメソッドを変更したいと考えています。どうしようか少し迷っています。私が考えていた...

public void run( int size ) {
    buffer = new byte[size];
    ...
}

しかし、それは私には正しくないように思えます。バイトの定義を混同しているように感じます。ばかげているように聞こえるかもしれませんが、私はまだこの情報に十分な自信がありません。UInt32Javaには同等の型がないため、aをJavaに変換するのは混乱します。知っている人がいたら教えてください。

4

1 に答える 1

2

混乱する理由はありません。あなたがしていることは正しいです。mmInStreamがInputStreamのインスタンスであると仮定します。

byte[] buffer = new byte[1024];
int bytes = mmInStream.read(buffer);

利用可能なものを最大 1024 バイトまで読み取り、読み取ったバイト数を返します。これは、データ ストリームに対する低レベルのアプローチです。これは問題ありません。つまり、このバイト配列を取得したので、それをどう処理するかを知る必要があるということです。

プリミティブをよく読んでいる場合は、DataInputStreamを調べて、そのように使用することをお勧めします。

DataInputStream dat = new DataInputStream(mmInStream);
int x = dat.readInt();

ストリームから 32 ビットのデータ (4 バイト) を読み取り、それらを Java int プリミティブに並べます。注意すべきことは、エンディアンと符号付き/符号なしの混同です。問題が発生した場合、バイトを 32 ビット int に読み取るには、<< 演算子を使用して、各バイトを順番に追加し、次に 8 ビット左シフトします。

あなたの状況では、読み取り後にバッファ内の値を見て、送信されているものを正確に把握するだけです.ストリームを目で見ることは、上記の2つの理由から重要になる可能性があります.

于 2012-07-23T14:23:50.420 に答える