2012-12-13 70 views
0

我想连接到一个终端模拟器在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); 
} 

如何正确初始化这些?每次我发送和接收数据时,是否应该真正设置流,这有什么关系吗?或者我应该做一些检查?

+0

,什么是你的问题之前,前初始化bisbos? – AlexR

+0

对不起,这是我如何正确地初始化这些?每次我发送和接收数据时,是否应该真正设置流,这有什么关系吗?或者我应该做一些检查? – Paul

回答

1

必须使用他们

你可以把它仅仅使用这两个线

session.setTermIn(bis); 
session.setTermOut(bos); 
+0

我试图在他们的定义中初始化它们,我会试试这个谢谢。我不确定我是否正确初始化它们。 – Paul

+0

我试图以相同的方式再次初始化它们,但它不起作用:byte [] a = new byte [0]; bis = new ByteArrayInputStream(a); bos = new ByteArrayOutputStream(); – Paul