我想连接到一个终端模拟器在android中使用库,这将连接到串行设备,并应显示我发送/接收的数据。要附加到终端会话,我需要提供一个输入流到setTermIn(InputStream)和一个输出流到setTermOut(OutputStream)。Java:输入流/输出流的默认值?
但是,当我声明的流如下,他们默认为null不是吗?
private OutputStream bos;
private InputStream bis;
...
//inside onCreate() method
session.setTermIn(bis);
session.setTermOut(bos);
/* Attach the TermSession to the EmulatorView. */
mEmulatorView.attachSession(session)
所以,当我尝试向流附加到会话我得到一个错误:
FATAL EXCEPTION: TermSession input reader
java.lang.NullPointerException at jackpal.androidterm.emulatorview.TermSession$2.run(TermSession.java:137)
指向这个代码库:
public void run()
{
try
{
while (true)
{
int read = mTermIn.read(mBuffer);
if (read == -1)
{
// EOF -- process exited
return;
}
mByteQueue.write(mBuffer, 0, read);
mMsgHandler.sendMessage(mMsgHandler.obtainMessage(NEW_INPUT));
}
}
catch (IOException e)
{
}
catch (InterruptedException e)
{
}
}
这是因为我尚未开始发送和接收数据,所以我没有将数据分配给流。我该怎么做,设置一些虚假的数据来分配给一个流? 我试过了,它仍然抱怨。也许我做错了。
要发送和接收数据,我有以下几种方法,但我不应该在每次打电话给他们时设置流。
重写,超过串行成立流发送数据的方法,运行每当我按ENTER键:
public void sendData(byte[] data)
{
bos = new ByteArrayOutputStream(data.length);
}
奔跑每当接收到的数据:
public void onDataReceived(int id, byte[] data)
{
bis = new ByteArrayInputStream(data);
}
如何正确初始化这些?每次我发送和接收数据时,是否应该真正设置流,这有什么关系吗?或者我应该做一些检查?
,什么是你的问题之前,前初始化
bis
和bos
? – AlexR对不起,这是我如何正确地初始化这些?每次我发送和接收数据时,是否应该真正设置流,这有什么关系吗?或者我应该做一些检查? – Paul