从带有缓冲区的网络输入流中读取的Java(需要排除空符号)

佩德罗·齐夫(Pedro Ziff)

我有从联网的输入流中读取的方法。

    //pattern value is shell prompt string ":~#"
    //this do read shells output like from command "ls", etc...
    public String readUntil(String pattern) throws IOException, JSchException {
    long began = System.currentTimeMillis();
    long lastTime = System.currentTimeMillis();
    StringBuilder sb = new StringBuilder();
    socket.setTimeout(timeout);
    iks: while (true) {
        try {
            int c = -1;
            byte[] text = new byte[1024];
            c = in.read(text);
            long now = System.currentTimeMillis();
            if (c != -1) {
                sb.append(new String(text));
                lastTime = now;
            }
            if (now - lastTime > timeout){
                System.out.println( "BREAK BY TIMEOUT");
                break;
            }
            if (sb.toString().contains(pattern)) {
                System.out.println( "BREAK BY PATTERN");
                break;
            }
            Thread.sleep(50);
        }catch(Exception e){
            System.out.println("¬"+e);
            break iks;
        }
    }
    System.out.println( "TIME TAKEN readUntil -> "+(System.currentTimeMillis()-began));
    //Log.v("¬","result -> "+sb.toString());
    return sb.toString();
}

这工作得相当快,但是每次读取都会用空值填充字节数组的末尾。怎么做“ sb.append(新的字符串(文本));” 排除空字节?

安德鲁·埃夫特(Andrew Evt)

尝试BufferedInputStream在您的代码中使用->BufferedInputStream(InputStream in)

and方法read(byte[] b, int off, int len)从给定的偏移量开始,将字节输入流中的字节读取到指定的字节数组中,并返回读取的字节数;如果已到达流的末尾,则返回-1。

在您的代码中它将是:

BufferedInputStream bis = new BufferedInputStream(in);
...
byte text[] = new byte[]; // size of byte array can change
c = bis.read(text, 0, 1024);

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何读取输入流缓冲区中存储的字符数

来自分类Dev

如何读取输入流缓冲区中存储的字符数

来自分类Dev

我如何正确地从标准输入中读取带有缓冲区的输入而不会截断任何单词?

来自分类Dev

我如何正确地从标准输入中读取带有缓冲区的输入而不会截断任何单词?

来自分类Dev

读取小缓冲区功能输入字符串,带有“标点”

来自分类Dev

Java-通过带有缓冲区的网络下载文件

来自分类Dev

为什么在LZW压缩中压缩缓冲区需要大于输入缓冲区?

来自分类Dev

流缓冲区大小小于输入流,但没有立即分段错误

来自分类Dev

读取c中的输入后如何清除缓冲区?

来自分类Dev

标准输入流 (pubsetbuf) 使用的内部缓冲区

来自分类Dev

从 SuperpoweredAndroidAudioIO 输入读取缓冲区?

来自分类Dev

在C语言中的scanf()过程中,数据如何从输入流流入输入缓冲区?

来自分类Dev

带有协议缓冲区的RPC

来自分类Dev

带有CMakeLists的协议缓冲区

来自分类Dev

STD文件流已损坏?(内部文件缓冲区为空,无法读取输入)

来自分类Dev

从缓冲区读取器输入字符串时的 Java 数字异常

来自分类Dev

如何使用Directx读取hdmi输入帧缓冲区?

来自分类Dev

scanf读取后输入缓冲区是否被清除?

来自分类Dev

从QTcpSocket读取时为空缓冲区

来自分类Dev

从QTcpSocket读取时为空缓冲区

来自分类Dev

ReadFile缓冲区是否需要为空?

来自分类Dev

自定义输入流。流缓冲区和下溢方法

来自分类Dev

如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

来自分类Dev

在 C++ 中清除空输入缓冲区的安全操作

来自分类Dev

如何检查输入缓冲区是否为空?

来自分类Dev

缓冲区读取器中的读取行

来自分类Dev

Java中的缓冲区大小

来自分类Dev

Java中的非阻塞缓冲区

来自分类Dev

Java中的循环缓冲区?

Related 相关文章

  1. 1

    如何读取输入流缓冲区中存储的字符数

  2. 2

    如何读取输入流缓冲区中存储的字符数

  3. 3

    我如何正确地从标准输入中读取带有缓冲区的输入而不会截断任何单词?

  4. 4

    我如何正确地从标准输入中读取带有缓冲区的输入而不会截断任何单词?

  5. 5

    读取小缓冲区功能输入字符串,带有“标点”

  6. 6

    Java-通过带有缓冲区的网络下载文件

  7. 7

    为什么在LZW压缩中压缩缓冲区需要大于输入缓冲区?

  8. 8

    流缓冲区大小小于输入流,但没有立即分段错误

  9. 9

    读取c中的输入后如何清除缓冲区?

  10. 10

    标准输入流 (pubsetbuf) 使用的内部缓冲区

  11. 11

    从 SuperpoweredAndroidAudioIO 输入读取缓冲区?

  12. 12

    在C语言中的scanf()过程中,数据如何从输入流流入输入缓冲区?

  13. 13

    带有协议缓冲区的RPC

  14. 14

    带有CMakeLists的协议缓冲区

  15. 15

    STD文件流已损坏?(内部文件缓冲区为空,无法读取输入)

  16. 16

    从缓冲区读取器输入字符串时的 Java 数字异常

  17. 17

    如何使用Directx读取hdmi输入帧缓冲区?

  18. 18

    scanf读取后输入缓冲区是否被清除?

  19. 19

    从QTcpSocket读取时为空缓冲区

  20. 20

    从QTcpSocket读取时为空缓冲区

  21. 21

    ReadFile缓冲区是否需要为空?

  22. 22

    自定义输入流。流缓冲区和下溢方法

  23. 23

    如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

  24. 24

    在 C++ 中清除空输入缓冲区的安全操作

  25. 25

    如何检查输入缓冲区是否为空?

  26. 26

    缓冲区读取器中的读取行

  27. 27

    Java中的缓冲区大小

  28. 28

    Java中的非阻塞缓冲区

  29. 29

    Java中的循环缓冲区?

热门标签

归档