1

Android のライブラリを使用して端末エミュレータに接続しようとしています。これはシリアル デバイスに接続され、送受信されたデータが表示されます。inputstreamターミナル セッションにアタッチするには、 tosetTermIn(InputStream)outputstreamtoを指定する必要がありますsetTermOut(OutputStream)

のようにいくつかのストリームを初期化してアタッチしますonCreate()。これらは単なる初期ストリームであり、送受信したいデータにはアタッチされていません。

private OutputStream bos;
private InputStream bis;

...

byte[] a = new byte[4096];
bis = new ByteArrayInputStream(a);
bos = new ByteArrayOutputStream();
session.setTermIn(bis);
session.setTermOut(bos);
/* Attach the TermSession to the EmulatorView. */
mEmulatorView.attachSession(session);

データを送受信するときにストリームをデータに割り当てたいのですが、間違っていると思います。sendData()Enterキーを押すたびに呼び出すメソッドには、次のものがあります。

public void sendData(byte[] data)
{
        bos = new ByteArrayOutputStream(data.length);         
}

メソッドではonReceiveData()、データがシリアル経由で受信されるたびに呼び出されます。

public void onDataReceived(int id, byte[] data)
{
        bis = new ByteArrayInputStream(data);           
}

端末画面にデータが表示されませんが、シリアル経由で正常に送受信しています。だから私の質問は、データを送受信するたびにストリームを設定するべきか、それとも一度だけ設定するべきかということです。mEmulatorView.attachSession(session)また、どこかで端末セッションに再度接続する必要がありますか、それとも新しいストリームを自動的に画面に送信する必要がありますか?

私の理論では、私の端末は古いストリームに接続されているため、端末画面にデータが表示されません。これは正しいでしょうか?

ブール値と if ステートメントを使用して、各メソッドで新しい入出力ストリームを一度だけ設定しようとしましたが、logcat で警告メッセージが表示されます

RuntimeException 'sending message to a Handler on a dead thread'

回答に基づいて write および rad に編集しましたが、ライブラリには端末にデータを供給するための独自の書き込みメソッドがあることに気付きました。その場合、ストリームが何のためにあるのかさえわかりません。エミュレーターに書き込むには、この書き込みが必要ですか?

public void write(byte[] data,
              int offset,
              int count)
Write data to the terminal output. The written data will be consumed by the emulation     client as input.
write itself runs on the main thread. The default implementation writes the data into a     circular buffer and signals the writer thread to copy it from there to the OutputStream.

Subclasses may override this method to modify the output before writing it to the  stream, but implementations in derived classes should call through to this method to do the  actual writing.

Parameters:
data - An array of bytes to write to the terminal.
offset - The offset into the array at which the data starts.
count - The number of bytes to be written.
4

1 に答える 1

1

Javaのオブジェクトは参照によって渡されるため、

bos = new ByteArrayOutputStream(data.length)

基本的に、以前の出力ストリームを破棄して、新しい出力ストリームを作成します。

入力ストリームと出力ストリームへの参照を維持し、それにデータを書き込んでみてください。例:

bos.write(data);
于 2012-12-14T12:45:59.663 に答える