为什么`loadFont`没有关闭输入流?我应该关闭吗?

Ita*_*tai 5 java javafx inputstream

看看Font#loadFont我的文档,我发现了这句话:

此方法不会关闭输入流.

不幸的是,这没有被解释或扩展.所以我的问题是:

  1. API不会关闭输入流的可能原因是什么?您是否可能想重新使用该流?我大多使用这样的方法:

    Font.loadFont(getClass().getResourceAsStream("path/to/font"), 13.0); 
    
    Run Code Online (Sandbox Code Playgroud)

    为了确保我的应用程序可以使用该字体,所以我从不重复使用输入流,我真的不能想到我想要的原因.

  2. 我应该自己关闭输入流吗?如果我没有关闭输入流,我应该期待任何问题吗?在过去,我遇到过以这种方式加载字体的问题,其中一些使用此字体配置的标签开始显示正方形,而其他标签(在同一场景中!)保持正常工作.这可能与不关闭输入流有关吗?

Ben*_*Ben 1

每个涉及稀缺或外部资源(例如文件描述符或流)的 API 的文档将明确说明谁有责任进行清理(在本例中为关闭流)。这有时被称为“所有权”。

在这种情况下,文档指出该loadFont方法不获取流的所有权。因此它仍然属于你:关闭流是你的责任。

try-with-resources 语句是执行此操作的最佳方法。