java - 为什么 `loadFont` 不关闭输入流?我应该关闭它吗?

标签 java javafx inputstream

查看 Font#loadFont 的文档我看到了这句话:

This method does not close the input stream.

不幸的是,这没有得到解释或扩展。所以我的问题是:

  1. API 不关闭输入流的可能原因有哪些?您可能想重新使用流吗? 我主要像这样使用这种方法:

    Font.loadFont(getClass().getResourceAsStream("path/to/font"), 13.0); 
    

    为了确保字体可用于我的应用程序,所以我从不重复使用输入流,而且我真的想不出我想要这样做的原因。

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

最佳答案

每个涉及稀缺资源或外部资源(例如文件描述符或流)的 API 的文档都将明确由谁负责清理(在这种情况下,关闭流)。这有时被称为“所有权”。

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

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

关于java - 为什么 `loadFont` 不关闭输入流?我应该关闭它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38189680/

相关文章:

java - 在 OSGi 包中使用 Spring AOP

java - 打印到文件的更改未保存

javafx - 如何在新的 JavaFx 错误跟踪器中查找错误

java - 即使文件存在也无法读取 InputStream

java - 关于 StringBuilder indexOf 的 javadoc 注释有误导性吗?

java - 用于在输入点和数字 JavaFX 后禁止输入点的正则表达式

java - 错误 : java. lang.NoSuchMethodException main([Ljava.lang.String;)

java - 如何使 2 个服务器线程与 2 个客户端线程通信?

java - 如何将 JavaFX ImageView 转换为 InputStream

javascript - Websockets-多种消息类型