java 的httpentity_java – 为什么作者使用EntityUtils.consume(httpEntity);?
真正归结为“好公民”(真正了解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);?相关推荐
- Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅)
Spring Boot 整合Redis 包含Java操作Redis哨兵 作者:哇塞大嘴好帥(哇塞大嘴好帅) 1. 配置环境 在SpringBoot2.0版本以后,原来使用的jedis被替换成为了let ...
- 译者招募 | 《Java编程思想》作者Bruce Eckel新作On Java 8
硅谷创业之父Paul Graham曾在<黑客与画家>中写道,"判断一种语言是否流行的条件是,一种免费的实现,一本相关书籍,以及语言所依附的计算机系统." 当然,Java ...
- 程序员成长之路 java面试指导(作者说的极好要看) 静下心看
https://blog.csdn.net/weixin_41780944/article/details/79429769 从面试官的角度分享一些后端校招经验(作者说的极好要看) https://b ...
- 为什么我会弃Java,选择了Kotlin——专访《Java编程思想》作者 Bruce Eckel
点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 多少语言就是死在了取代Java的路上 Java:我活着的意义就是天天被取代 Java:我也不 ...
- Java NIO由浅入深(作者原创)
个人简介 作者是一个来自河源的大三在校生,以下笔记都是作者自学之路的一些浅薄经验,如有错误请指正,将来会不断的完善笔记,帮助更多的Java爱好者入门. 文章目录 个人简介 NIO三大组件 Channe ...
- JAVA设计模式什么鬼(备忘录)——作者:凸凹里歐
备忘录,备份曾经发生过的历史记录,以防忘记,之后便可以轻松回溯过往.想必我们曾经都干过很多蠢事导致糟糕的结果,当后悔莫及的时候已经是覆水难收了,只可惜这世界上没有后悔药,事后我们能做的只能去弥补过失, ...
- 编程不适合12小时工作制,“我有灵感才工作” | 专访《Java编程思想》作者Bruce Eckel...
整理 | 蔡芳芳 采访 | 王一鹏.蔡芳芳 本文转载自公众号infoQ 编者按: 如果你是一个 Java 开发者,那你想必读过或至少听过<Java 编程思想>(Thinking in Ja ...
- 一站式 Java Web 开发框架 Firefly 作者邱鹏滔专访
Firefly是一个高性能的一站式Java Web框架,涵盖了web开发的主要技术栈,包含模板引擎.IOC/MVC框架.HTTP服务器.Common工具.Log.Json解析器等模块. 项目主页: h ...
- JAVA设计模式什么鬼(代理)——作者:凸凹里歐
代理,代表打理,以他人的名义代表委托人打理其本职工作之外或不所能及的事务,达成合作关系并更高效地促成事务完成的目的.例如明星经纪人,他们并没有像明星一样会唱歌.跳舞或演戏,而是替明星打理一些无暇顾及的 ...
最新文章
- npm run build 打包 之后怎么用_基于createreactapp打包编译自己的第三方UI组件库
- java培训学费_参加java培训大概的费用是多少钱?
- Linux网络协议栈(四)——链路层(2)
- linux挂载iso文件
- Java开发必须熟悉的Linux命令总结
- spring elasticsearch 按条件删除_SpringBoot2 高级案例(08):整合 ElasticSearch框架,实现高性能搜索引擎...
- ruby hash方法_Ruby中带有示例的Hash.keys方法
- 无法登录a6服务器可以修复么,航天A6登录常见问题
- 静态代理和动态代理设计模式
- magic ui3.0是鸿蒙系统吗,magicui3.1更新内容要不要升级 magicui3.0新功能体验
- 制作pip源(按需,非镜像方式)
- 单片机ADC分压电阻测量直流电压
- 淘宝客赚钱方式及怎么入门和推广引流详解
- 老婆问我什么是同步、异步、阻塞、非阻塞!
- 2019提前批——拼多多笔试题
- 112-RTKLIB中关于dcb文件读取的问题
- 聚醋酸乙烯酯(PVAc)乳剂市场现状及未来发展趋势
- 【vue】npm run dev报错解决方法
- idea在类下面展示方法列表
- 51单片机74ls273并行输出地址c语言程序,跑马灯/输入输出接口(片选地址74LS273)...