ExternalResource实例close()以后依然能多次使用?
-
主项目的代码里,预期一直使用的ExternalResource实例,每次使用后就执行了close(),但是实际上依然能多次使用这个实例。这个现象正常吗?对于预期一直使用的ExternalResource实例,正确做法是不close()是吧?
写进了demo项目来复现演示:DemoBotLogic的成员demoExternalResource仅初始化一次。每次onMessage时就执行close()。
public class DemoBotLogic implements ListenerHost { JvmPlugin plugin; ExternalResource demoExternalResource; ………… public DemoBotLogic(JvmPlugin plugin) { this.plugin = plugin; ………… demoExternalResource = ExternalResource.create(plugin.resolveDataFile("demo.png")); } @NotNull @EventHandler public ListeningStatus onMessage(@NotNull GroupMessageEvent event) throws Exception { // test close ExternalResource every time if (event.getMessage().contentToString().equals("test ExternalResource")) { Image image = event.getGroup().uploadImage(demoExternalResource); try { demoExternalResource.close(); } catch (IOException e) { plugin.getLogger().error("Image externalResource.close error" + e.getMessage()); } event.getGroup().sendMessage(image); } return ListeningStatus.LISTENING; } }
mcl日志也没有报"Image externalResource.close error",就算是执行close()成功了吧。
-
close()
指的是 close 了就不能再使用inputStream()
开启一个新的输入流,md5
等信息是储存在内存的, 内置实现并不会在close
的时候删除这些信息, 属于正常现象