Java:区分一条消息的结尾和流的结尾

Java:区分一条消息的结尾和流的结尾,java,io,eof,Java,Io,Eof,我正在编写一个小程序,使用SSH写入命令行,因此通常在输入后获得输出 现在我读的是这样的输出: new Thread() { public void run() { int character; try { while ((character = output.read()) != -1) { string += character;

我正在编写一个小程序,使用SSH写入命令行,因此通常在输入后获得输出

现在我读的是这样的输出:

    new Thread() {
        public void run() {
            int character;
            try {
                while ((character = output.read()) != -1) {
                    string += character;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }.start();
到目前为止,我控制着这条河的尽头。但是,我希望能够估计一条消息的结尾(不一定只有一行),我指的是分别发送到输入的远程输出

有可能这样做吗


例如,当我通过SSH登录时,我发送命令“SSHuser@server,现在读取线程应该只读取user@server's password:“消息,然后释放对象的锁,以便写入流可以继续。但是我不知道怎么做…

TCP中没有消息这样的东西。它是一个字节流。如果您想要消息,您必须自己定义并实现它们。在一些简单的情况下,一行就是一条消息。正如您所说,这里的情况并非如此,这取决于您的定义。

谢谢您。那好吧。但是,在TCP中,是否有任何方法可以估计远程接收到的输入的远程应答输出?否则,例如,我如何实现它?不是用Java,对吗?当然,我可以做的是为阻塞方法设置一个超时,但这只是一个不好的同步借口…@TrojanWhoresProcurer SSH根本不是一个消息传递案例。两个方向都有流,输入可以随时出现在其中任何一个方向上。您应该使用一个单独的线程来读取SSH。我确实使用一个单独的线程来读取。问题是,我并不总是知道“回复”的格式,它可以来自不同的程序,返回不同的结果或错误。否则,很容易“定义”这样的消息。但在这种情况下,这似乎是不可能的,那么。。。我别无选择,只能给阅读线程加一个不雅观的超时…你不需要知道格式。你只需要在得到输入的时候读取它,然后将它发送到它应该去的任何地方。是的,但它并不总是那么简单。至少在我看来是这样的。不仅是格式,还有长度和时间。一个进程或线程在两行之间可能需要更长的中断时间,人们通常想知道它来自哪个进程或线程;尤其是当一个人通过多个进程或线程发送到远程机器时。我想,一个人需要不同的解决方案。无论如何谢谢你!