为什么java.util.Scanner.next()返回空字符串?

杰瑞德

我有一台实现Telnet服务器的设备,并且正在编写Java代码与之通信。当前的实现“有效”,我的意思是它将挂起一段时间,有时会立即挂起,有时在一小时后或介于两者之间的任何时间挂起。我没有排除它本身就是设备本身的可能性,但是,使用腻子长时间运行的会话似乎没有问题,因此我假设它是我的Java代码。

我将首先布置代码,然后更详细地描述问题:

该连接由一个对象处理,该对象在后台EthernetTelnetConnection()使用Apache Commons TelnetClient()

public EthernetTelnetConnection(String host, int port) throws IOException {
    mTelnet = new TelnetClient();
    mTelnet.connect(host, port);

    mOut = mTelnet.getOutputStream();
    mIn = mTelnet.getInputStream();
}

这些流通过以下方式转换为缓冲流:

mReadStream = new BufferedInputStream(mConnection.getInputStream());
mWriteStream = new BufferedOutputStream(mConnection.getOutputStream());

可以通过以下方式获取:

public BufferedInputStream getInputStream() {
    return mReadStream;
}

public BufferedOutputStream getOutputStream() {
    return mWriteStream;
}

因此,在创建连接后,我开始尝试解析流。这发生在专用线程中,该线程的唯一目的是执行该方法:

public void detectMessages() throws IOException {
    final BufferedInputStream in = mTekdaqc.getInputStream();
    StringBuilder builder = new StringBuilder();
    int data;
    final Scanner scan = new Scanner(in, "UTF-8").useDelimiter(Character.toString((char) AASCIIMessage.RECORD_SEPARATOR_CHAR));
    while (scan.hasNext()) {
        onMessageDetected(scan.next());
    }

    /*while ((data = in.read()) != -1) {
    if (data == AASCIIMessage.RECORD_SEPARATOR_CHAR) {
        onMessageDetected(builder.toString());
            builder = new StringBuilder();
        } else {
            builder.append((char) data);
        }
    }*/
}

并且AASCIIMessage.RECORD_SEPARATOR_CHAR定义为:

public static final int RECORD_SEPARATOR_CHAR = 0x1E;

底部的注释部分有一些其他变量,这是我以前的尝试。两种方法都存在相同的问题,即:onMessageDetected()最终以成千上万个空字符串被调用。通常,如果我让事情继续运行,最终事情会像往常一样持续一会儿,那么这个问题就会再次出现。因此,我试图找出是什么原因导致扫描程序和简单的while循环/读取周期检测消息分隔符。当捕获设备与腻子之间的有线通讯时,我可以确认它没有发送这些分隔符,尽管它正在发送保持活动的数据包。

更新

我认为这可能是一个问题,其中Apache TelnetClient将字节序列解释为终端命令,而Putty则不然。我不确定该设备实现的终端实现方式,因为我没有创建该代码,也未对其进行记录。我看了一下腻子,它没有在Telnet配置窗口中指示终端类型。

更新2

我连接System.outTelnetClient实例的间谍流,并在十六进制编辑器中检查了输出,发现该流实际上正在看到重复的RS (0x1E)字符。用Putty Telnet连接嗅探流量我看不到这一点,那么是否存在某种与TelnetClient类和设备不正确的配置

杰瑞德

因此,事实证明我可以将此归咎于设备。当我嗅探到腻子的流量并执行与Java应用程序完全相同的命令序列时,我能够重现该问题。我需要在固件中进行追踪,这是一个错误。感谢@Adam和@MrunalGosar的输入。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我应该关闭java.util.Scanner变量?

来自分类Dev

为什么char * foo()返回空字符串?

来自分类Dev

为什么 glGetProgramInfoLog 返回空字符串?

来自分类Dev

关于java.util.Scanner

来自分类Dev

Java.util.Scanner Error

来自分类Dev

Java.util.Scanner错误

来自分类Dev

使用Scanner.next()时java.util.NoSuchElementException

来自分类Dev

Java函数返回空字符串

来自分类Dev

Java String.valueOf返回空字符串

来自分类Dev

当有更多字符可用时,为什么takeWhile返回空字符串?

来自分类Dev

为什么我们应该关闭java.util.Scanner变量?

来自分类Dev

为什么java.util.scanner会为每个空间重复循环

来自分类Dev

为什么我的 java.util.Scanner 不读取我的文件?

来自分类Dev

Java 中“java.util.Scanner”中的句点是指什么?

来自分类Dev

无法导入java.util.Scanner

来自分类Dev

Scala等效于java.util.Scanner

来自分类Dev

java.util.Scanner中的错误

来自分类Dev

Scala等效于java.util.Scanner

来自分类Dev

java.util.Scanner 中的 NoSuchElementException

来自分类Dev

为什么process.MainWindowTitle返回空字符串?

来自分类Dev

为什么null语句ToString()返回空字符串?

来自分类Dev

为什么解析空字符串文字时,Parslet(在Ruby中)会返回空数组?

来自分类Dev

为什么std :: string :: substr抛出异常而不是返回空字符串?

来自分类Dev

为什么String.match(/ \ d * /)返回空字符串?

来自分类Dev

为什么null语句ToString()返回空字符串?

来自分类Dev

为什么我的函数在python中返回空字符串?

来自分类Dev

为什么解析空字符串文字时,Parslet(在Ruby中)会返回空数组?

来自分类Dev

为什么process.MainWindowTitle返回空字符串?

来自分类Dev

Bash:为什么不匹配时不返回空字符串

Related 相关文章

  1. 1

    为什么我应该关闭java.util.Scanner变量?

  2. 2

    为什么char * foo()返回空字符串?

  3. 3

    为什么 glGetProgramInfoLog 返回空字符串?

  4. 4

    关于java.util.Scanner

  5. 5

    Java.util.Scanner Error

  6. 6

    Java.util.Scanner错误

  7. 7

    使用Scanner.next()时java.util.NoSuchElementException

  8. 8

    Java函数返回空字符串

  9. 9

    Java String.valueOf返回空字符串

  10. 10

    当有更多字符可用时,为什么takeWhile返回空字符串?

  11. 11

    为什么我们应该关闭java.util.Scanner变量?

  12. 12

    为什么java.util.scanner会为每个空间重复循环

  13. 13

    为什么我的 java.util.Scanner 不读取我的文件?

  14. 14

    Java 中“java.util.Scanner”中的句点是指什么?

  15. 15

    无法导入java.util.Scanner

  16. 16

    Scala等效于java.util.Scanner

  17. 17

    java.util.Scanner中的错误

  18. 18

    Scala等效于java.util.Scanner

  19. 19

    java.util.Scanner 中的 NoSuchElementException

  20. 20

    为什么process.MainWindowTitle返回空字符串?

  21. 21

    为什么null语句ToString()返回空字符串?

  22. 22

    为什么解析空字符串文字时,Parslet(在Ruby中)会返回空数组?

  23. 23

    为什么std :: string :: substr抛出异常而不是返回空字符串?

  24. 24

    为什么String.match(/ \ d * /)返回空字符串?

  25. 25

    为什么null语句ToString()返回空字符串?

  26. 26

    为什么我的函数在python中返回空字符串?

  27. 27

    为什么解析空字符串文字时,Parslet(在Ruby中)会返回空数组?

  28. 28

    为什么process.MainWindowTitle返回空字符串?

  29. 29

    Bash:为什么不匹配时不返回空字符串

热门标签

归档