gpt4 book ai didi

java - 调试 i/o 流 : watching for change

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:03 25 4
gpt4 key购买 nike

在调试时我想观察我的输入流以判断它们何时收到数据(并准备好读取)。我知道 Eclipse 调试器会突出显示已更改的变量值,但这是否也适用于值中的值?

我的情况:我有一个 BufferedReader 列表。我究竟应该导航到哪里来观察变化(通过在侧 Pane 中展开我的 BufferedReaders)?或者有什么办法可以看顶层?如果有任何区别,我的 I/O 流将附加到套接字。

最佳答案

我担心无法从 Eclipse 自动突出显示“已更改”的阅读器。突出显示保留用于变量本身的更改。在对象的情况下,“更改”意味着它们将指向不同的对象,但事实并非如此:您的变量都继续引用完全相同的 BufferedReader 实例。通过类树下降最终会让您获得所需的信息,但同时对多个变量执行此操作非常痛苦。

如果您需要照顾的 Reader 的实际数量不是太多,以下方法可能对您有所帮助:您可以子类化 BufferedReader 并覆盖 toString() 以便它输出对您有用的信息。这样,无论何时单击“变量”选项卡中的实际变量,或使用箭头键突出显示它时,您都会看到该信息。不如 Eclipse 的自动突出显示好,但也许足够好?

这是一个简单的例子。在“System.out.println(in.read())”行上放置一个断点,然后查看调试器中的“in”变量。第一次,您会看到“available: 34”。在下一次,您将看到“available: 0”,因为 BufferedReader 已经完全读取了输入流,所有后续读取都将源自 BufferedReader 的缓冲区。

public class InputStreamDebugTest {

public static class MyReader extends BufferedReader {

private final InputStream in;

public MyReader(InputStream in) {
super(new InputStreamReader(in));
this.in = in;
}

@Override
public String toString() {
try {
return "available: " + in.available();
} catch (IOException e) {
return "Exception: " + e.getMessage();
}
}

}

public static void main(String[] args) throws IOException {

MyReader in = new MyReader(new ByteArrayInputStream("Just some minor text for debugging".getBytes()));
while (true) {
System.out.println(in.read());
}

}

}

关于java - 调试 i/o 流 : watching for change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8249284/

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