MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接

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

    开发交流
    2
    2
    69
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H
      hundun000 ⭐2021⭐ last edited by 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 Reply Last reply Reply Quote 0
      • Karlatemp
        Karlatemp last edited by Karlatemp

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

        1 Reply Last reply Reply Quote 1
        • 1 / 1
        • First post
          Last post
        Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact