繁体   English   中英

Java:inputstream / outputstream的默认值?

[英]Java: default values for inputstream/outputstream?

我正在尝试使用android中的库连接到终端仿真器,这将连接到串行设备,并且应该向我显示发送/接收的数据。 要附加到终端会话,我需要向setTermIn(InputStream)提供一个输入流,并向setTermOut(OutputStream)提供一个输出流。

但是,当我按以下方式声明流时,它们默认为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);
}

如何正确初始化? 并且我真的应该在每次发送和接收数据时都设置流吗,这有关系吗? 还是应该检查一下?

使用前必须先初始化bisbos

您可以在使用这两行之前将其放置

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM