gpt4 book ai didi

java - InputStream 的问题

转载 作者:行者123 更新时间:2023-12-02 07:40:46 24 4
gpt4 key购买 nike

以下是我将用于我的项目的代码片段的一部分。

public String fetchFromStream()
{
try
{
int charVal;
StringBuffer sb = new StringBuffer();

while((charVal = inputStream.read()) > 0) {
sb.append((char)charVal);
}
return sb.toString();
} catch (Exception e)
{
m_log.error("readUntil(..) : " + e.getMessage());
return null;
} finally {
System.out.println("<<<<<<<<<<<<<<<<<<<<<< Called >>>>>>>>>>>>>>>>>>>>>>>>>>>");
}
}

最初,while 循环开始工作得很好。但是在从流中读取可能的最后一个字符后,我期望得到 -1 返回值。但这就是我的问题开始的地方。代码被挂起,连 finally block 都没有执行。

我在 Eclipse 中调试这段代码以查看运行时实际发生了什么。我在 while 循环中设置了一个指针(调试),并不断监视 StringBuffer 逐个填充 char 值。但是突然在检查 while 循环内的条件时,调试控制丢失了,这就是代码进入挂断状态的地方!也不抛出异常!!

这里发生了什么?

编辑:

这就是我获取 InputStream 的方式。基本上,我使用 Apache Commons Net 进行 Telnet。

private TelnetClient getTelnetSession(String hostname, int port)
{
TelnetClient tc = new TelnetClient();
try
{
tc.connect(hostname, port != 0 ? port : 23);

//These are instance variables
inputStream = tc.getInputStream();
outputStream = new PrintStream(tc.getOutputStream());

//More codes...

return tc;
} catch (SocketException se)
{
m_log.error("getTelnetSession(..) : " + se.getMessage());
return null;
} catch (IOException ioe)
{
m_log.error("getTelnetSession(..) : " + ioe.getMessage());
return null;
} catch (Exception e)
{
m_log.error("getTelnetSession(..) : " + e.getMessage());
return null;
}
}

最佳答案

查看JavaDocs :

Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. If no byte is available because the end of the stream has been reached, the value -1 is returned. This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.

简单来说:如果流结束(例如文件结尾),read() 会立即返回 -1。然而,如果流仍然打开但 JVM 正在等待数据(慢速磁盘、套接字连接),read()阻塞(并没有真正挂起)。

你从哪里得到流?查看available() - 但请不要在耗尽 CPU 的循环中调用它。

最后:将 int/byte 转换为 char 仅适用于 ASCII 字符,请考虑使用 Reader InputStream 的顶部。

关于java - InputStream 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com