真正归结为“好公民”(真正了解HTTPClient接口的合同)。

EntityUtils.consume将会释放所有由httpEntity所持有的资源,这本质上意味着释放任何底层Stream,并将Connection对象返回到其池中(在连接管理器是多线程的情况下)或释放连接管理器,以便它可以处理下一个请求。

如果不消耗实体,那么真正取决于finally子句中的“关闭连接管理器”的意思。它会关闭尚未发送回池的待处理流/连接吗?我不知道它会合同做什么(尽管我认为它是实现的)。如果没有,那么您可能会泄漏系统资源(套接字等)。

发生什么也可能取决于可能(如果它被执行)的Entity对象的可能的完成方法释放其资源,再次,不确定它在实体的合同中这样做。

让我们假设ConnectionManager在关闭时实际上正确地关闭所有待处理的资源。你还需要消费实体吗?我说是的,因为一个月后,有人会修改你的代码,并在同一个try / finally块中进行第二个HTTP调用,并且可能无法这样做,因为你没有以你应该拥有的方式释放资源(例如,你的客户端是在一个连接池,不释放第一个连接会使第二个调用失败)。

所以我的观点是:实体是资源,资源在不需要的时候应该被释放。稍后计数别人为你释放可能会在将来伤害你。原作者可能会想到这些。

作为附注,请注意,您写的实现实际上将消耗读者直到底层流的结尾,所以消费调用实际上根本不会做任何事情,但在我看来,这是一个实现细节(从我的头顶,一旦响应流被完全读取,连接对象将自动释放/发回到http客户端的池中)。还要注意,如果您使用API​​提供的ResponseHandler专业知识,所有这些消费逻辑也将从您抽象出来。最后,API不保证response.getEntity永远不会返回null,所以你应该检查它以避免NullPointerException。

java 的httpentity_java – 为什么作者使用EntityUtils.consume(httpEntity);?相关推荐

  1. Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅)

    Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅) 1. 配置环境 在SpringBoot2.0版本以后,原来使用的jedis被替换成为了let ...

  2. 译者招募 | 《Java编程思想》作者Bruce Eckel新作On Java 8

    硅谷创业之父Paul Graham曾在<黑客与画家>中写道,"判断一种语言是否流行的条件是,一种免费的实现,一本相关书籍,以及语言所依附的计算机系统." 当然,Java ...

  3. 程序员成长之路 java面试指导(作者说的极好要看) 静下心看

    https://blog.csdn.net/weixin_41780944/article/details/79429769 从面试官的角度分享一些后端校招经验(作者说的极好要看) https://b ...

  4. 为什么我会弃Java,选择了Kotlin——专访《Java编程思想》作者 Bruce Eckel

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 多少语言就是死在了取代Java的路上 Java:我活着的意义就是天天被取代 Java:我也不 ...

  5. Java NIO由浅入深(作者原创)

    个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. 文章目录 个人简介 NIO三大组件 Channe ...

  6. JAVA设计模式什么鬼(备忘录)——作者:凸凹里歐

    备忘录,备份曾经发生过的历史记录,以防忘记,之后便可以轻松回溯过往.想必我们曾经都干过很多蠢事导致糟糕的结果,当后悔莫及的时候已经是覆水难收了,只可惜这世界上没有后悔药,事后我们能做的只能去弥补过失, ...

  7. 编程不适合12小时工作制,“我有灵感才工作” | 专访《Java编程思想》作者Bruce Eckel...

    整理 | 蔡芳芳 采访 | 王一鹏.蔡芳芳 本文转载自公众号infoQ 编者按: 如果你是一个 Java 开发者,那你想必读过或至少听过<Java 编程思想>(Thinking in Ja ...

  8. 一站式 Java Web 开发框架 Firefly 作者邱鹏滔专访

    Firefly是一个高性能的一站式Java Web框架,涵盖了web开发的主要技术栈,包含模板引擎.IOC/MVC框架.HTTP服务器.Common工具.Log.Json解析器等模块. 项目主页: h ...

  9. JAVA设计模式什么鬼(代理)——作者:凸凹里歐

    代理,代表打理,以他人的名义代表委托人打理其本职工作之外或不所能及的事务,达成合作关系并更高效地促成事务完成的目的.例如明星经纪人,他们并没有像明星一样会唱歌.跳舞或演戏,而是替明星打理一些无暇顾及的 ...

最新文章

  1. npm run build 打包 之后怎么用_基于createreactapp打包编译自己的第三方UI组件库
  2. java培训学费_参加java培训大概的费用是多少钱?
  3. Linux网络协议栈(四)——链路层(2)
  4. linux挂载iso文件
  5. Java开发必须熟悉的Linux命令总结
  6. spring elasticsearch 按条件删除_SpringBoot2 高级案例(08):整合 ElasticSearch框架,实现高性能搜索引擎...
  7. ruby hash方法_Ruby中带有示例的Hash.keys方法
  8. 无法登录a6服务器可以修复么,航天A6登录常见问题
  9. 静态代理和动态代理设计模式
  10. magic ui3.0是鸿蒙系统吗,magicui3.1更新内容要不要升级 magicui3.0新功能体验
  11. 制作pip源(按需,非镜像方式)
  12. 单片机ADC分压电阻测量直流电压
  13. 淘宝客赚钱方式及怎么入门和推广引流详解
  14. 老婆问我什么是同步、异步、阻塞、非阻塞!
  15. 2019提前批——拼多多笔试题
  16. 112-RTKLIB中关于dcb文件读取的问题
  17. 聚醋酸乙烯酯(PVAc)乳剂市场现状及未来发展趋势
  18. 【vue】npm run dev报错解决方法
  19. idea在类下面展示方法列表
  20. 51单片机74ls273并行输出地址c语言程序,跑马灯/输入输出接口(片选地址74LS273)...

热门文章

  1. Mysql高级部分系列(四)
  2. java对接支付宝实现支付功能
  3. 家庭宽带共享的解决方案
  4. 2.5亿!华为成立新公司
  5. 【阿里云资讯】如何让云计算安全变得更“聪明”
  6. 2022全国大学生数据分析大赛A题-医药电商销售数据分析
  7. 机器学习之最小二乘法完成一元线性回归【内附Python实现】
  8. 北京dns服务器ip地址_什么是DNS? 域名系统,DNS服务器和IP地址概念介绍
  9. 趣味代码之Java关机病毒
  10. Python爬虫爬取马蜂窝北京景点信息