Java 如何向TelnetOutputStream一次写入一个字符?

Java 如何向TelnetOutputStream一次写入一个字符?,java,apache-commons,telnet,outputstream,Java,Apache Commons,Telnet,Outputstream,我使用的是apache.commons.net.telnet 我有char[]array。我正在调用TelnetClient.getOutputStream().write(数组[I])。 我希望我的数据一次只发送一个字符,但Wireshark显示第一个字符单独发送,其余字符一起发送。 为什么会出现这种情况?如何逐个字符发送数据?在每次调用write()后,您是否尝试调用flush() flush()函数应该在缓冲区填满之前发送流中的任何内容。如果您真的想一次发送一个字符(为什么,它会让您的速度

我使用的是
apache.commons.net.telnet

我有
char[]array
。我正在调用
TelnetClient.getOutputStream().write(数组[I])。

我希望我的数据一次只发送一个字符,但Wireshark显示第一个字符单独发送,其余字符一起发送。
为什么会出现这种情况?如何逐个字符发送数据?

在每次调用write()后,您是否尝试调用
flush()


flush()
函数应该在缓冲区填满之前发送流中的任何内容。

如果您真的想一次发送一个字符(为什么,它会让您的速度变慢),我想您必须在数组上迭代,并每次用一个字节调用write。然后在每次写入后刷新。类似(未测试,但它应该给您一个提示)


嗯。这是正确的答案。要尽快发送数据,请执行以下操作:

在输出流上调用setTcpNoDelay(true)

使用整个数组调用write。你应该一次写一个字节。同时写入整个数组将快得多

写入后调用flush()

这是发送数据的最快方式,也是创建最小延迟的方式。也就是说:一次发送一个字节并不能确保服务器更快地接收它们


一次发送一个字节的数据会减慢速度,而不是加快速度。

您是否已经尝试在写入()后输出流.flush()?是的,我在写入()后调用
flush()
!这可能是因为你的操作系统让数据在发送之前等待更多的数据。只是一个测试,尝试在每次刷新后添加对Thread.sleep(10)的调用。但我还是不明白你为什么要这么做。一次发送一个字节的数据,所需时间至少是一次发送所有数据的100倍。我需要实时接收来自telnet服务器的响应!这实际上取决于调用write()之间的时间。如果我调用Thread.sleep(10),它的工作方式是相同的,但是如果我调用Thread.sleep(200)字符,则一次发送一个字符。有可能实时绕过这个问题吗??一次发送一个字节不会给你更快的响应。我告诉错了。我不仅需要在输入'\n'字符后发送数据。例如,如果我键入了“?”,则telnet服务器应在键入“?\n”后以帮助消息响应我。
OutputStream os=TelnetClient.getOutputStream();
for(int i=0;i!=array.length;i++) {
  os.write(array[i]);
  os.flush();
}