MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    ExternalResource实例close()以后依然能多次使用?

    开发交流
    2
    2
    198
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • H
      hundun000 ⭐2021⭐ 最后由 hundun000 编辑

      主项目的代码里,预期一直使用的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;
      
        }
      
      
      
      
      
      }
      

      07157f3e-8285-4e95-b6e1-e335c2204ea4-image.png

      mcl日志也没有报"Image externalResource.close error",就算是执行close()成功了吧。

      1 条回复 最后回复 回复 引用 0
      • Karlatemp
        Karlatemp 最后由 Karlatemp 编辑

        close() 指的是 close 了就不能再使用 inputStream() 开启一个新的输入流,md5 等信息是储存在内存的, 内置实现并不会在 close 的时候删除这些信息, 属于正常现象

        1 条回复 最后回复 回复 引用 1
        • 1 / 1
        • First post
          Last post
        Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact