我正在尝试使用 android 中的库连接到终端仿真器,这将连接到串行设备并应该向我显示发送/接收的数据。要附加到终端会话,我需要提供inputstream
tosetTermIn(InputStream)
和outputstream
to 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,但我注意到该库有自己的 write 方法可以将数据提供给终端,所以如果是这种情况,我什至不知道流的用途,并且我需要这个写来写到模拟器吗?
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.