ByteBuffer转String与解析为json对应的对象
事情是这样的,今天需要对Feign的响应进行处理,Feign在异常时返回的Body为字节缓冲,需要自己处理。
ByteBuffer是个啥
原文 https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html
字节缓冲区可以是直接的,也可以是非直接的。给定一个直接字节缓冲区,Java 虚拟机将尽最大努力直接在其上执行本机 I/O 操作。也就是说,在每次调用底层操作系统的本机 I/O 操作之前(或之后) ,它都会试图避免将缓冲区的内容复制到(或从)中间缓冲区。
可以通过调用这个类的 allocateDirect 工厂方法来创建直接字节缓冲区。通过此方法返回的缓冲区通常比非直接缓冲区具有更高的分配和释放成本。直接缓冲区的内容可能驻留在正常的垃圾收集堆之外,因此它们对应用程序的内存占用的影响可能不明显。因此,建议将直接缓冲区主要分配给受基础系统本机 I/O 操作影响的大型长寿命缓冲区。一般来说,只有当直接缓冲区产生可测量的程序性能增益时,才最好分配直接缓冲区。
还可以通过将文件的区域直接映射到内存中来创建直接字节缓冲区。Java 平台的一个实现可以有选择地支持通过 JNI 从本机代码直接创建字节缓冲区。如果其中一种缓冲区的实例指的是内存中不可访问的区域,那么访问该区域的尝试将不会改变缓冲区的内容,并将导致在访问时或稍后某个时间抛出未指定的异常。
字节缓冲区是直接的还是非直接的,可以通过调用其 isDirect 方法来确定。提供此方法是为了使显式缓冲区管理可以在性能关键代码中完成。
说白了就是JVM给你的一个工具类,跟机器底层的缓冲区有关系,因为比较底层,所以也是以字节为单位
ByteBuffer转化为字符串
同样位于java.nio包下面还有一个兄弟是Charset,他给了一个方法来构造字符串
Charset charset = Charset.forName("utf-8");
String json = charset.decode(byteBuffer).toString();
转化为json后解析为对象
本来的构想是:将字节转化为字符串,然后用Jackson(Spring自带)解析为对象
Charset charset = Charset.forName("utf-8");ByteBuffer byteBuffer = e.responseBody().get();String json = charset.decode(byteBuffer).toString();ObjectMapper objectMapper = new ObjectMapper();ObjectReader reader = objectMapper.readerFor(BaseVo.class);try {reader.readValue(byteBuffer.array());} catch (IOException ioException) {ioException.printStackTrace();}
但是用的时候才发现,好家伙ObjectReader提供了一个从字节数组读数据的方法
我们直接用就完事了
ByteBuffer byteBuffer = e.responseBody().get();ObjectMapper objectMapper = new ObjectMapper();ObjectReader reader = objectMapper.readerFor(BaseVo.class);try {reader.readValue(byteBuffer.array());} catch (IOException ioException) {ioException.printStackTrace();}
ByteBuffer转String与解析为json对应的对象相关推荐
- IDEA Java解析GeoJson.json文件
IDEA Java解析GeoJson.json文件 一.遇到的问题 1. 无法导入成功 2. org.geotools.StyleFactory is not an ImageIO SPI class ...
- Java解析SQL记录为JSON_Oracle解析复杂json的方法
问题背景: 当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的PLSQL脚本大多也只可以解析结构较单一的json串,对于结构复杂的json串还无法解析.如此 ...
- excel 树结构json_写一个上传excel表格,解析成 json 的接口
IDE:IDEA 编程语言:JAVA controller 类 业务处理类 model 类 Controller import com.你的路径.ImportTaskExcel; import org ...
- oracle大对象实例_Oracle解析复杂json的方法实例详解
问题背景: 当前在Oracle数据库(11G之前的版本)解析json没有可以直接使用的系统方法,网上流传的PLSQL脚本大多也只可以解析结构较单一的json串,对于结构复杂的json串还无法解析.如此 ...
- android最大json,Android:解析大型JSON文件
我正在创建一个Android应用程序,该应用程序应该将Json从文件或网址解析为jsonarray和jsonobjects. 问题是,我的JSON是3.3 MB,当我使用一个简单的代码,如下所示:(现 ...
- 用 Go 解析复杂 JSON 的思路
Go语言自带的encode/json包提供了对JSON数据格式的编码和解码能力.之前的文章<如何控制Go编码JSON数据格式的行为>已经介绍了编码JSON时常见的几个问题,如何使用enco ...
- 学会用Go解析复杂JSON的思路
Go语言自带的encode/json包提供了对JSON数据格式的编码和解码能力.之前的文章<如何控制Go编码JSON数据格式的行为>已经介绍了编码JSON时常见的几个问题,如何使用enco ...
- Oracle 使用GSON库解析复杂json串
在前文中讲到了如何使用JSON标准库解析json串,参考: Oracle解析复杂json的方法(转) 现补充一篇使用GSON库在Oracle中解析复杂json的方法. GSON串的使用教程参考官方文档 ...
- 组装复杂json请求数据和解析复杂json数据
在项目中有很多的接口对接的问题,于是就遇到了客户提供的各种奇葩的请求体.说一下最近遇到的一个复杂的json格式请求数据如下: {"bizData": {"userList ...
最新文章
- 20行代码发一篇NeurIPS:梯度共享已经不安全了
- 技巧.自己学会取名字,学会欣赏
- GetLastError 函数返回值大全
- 【NLP】NER数据标注中的标签一致性验证
- 合并两个有序数组 java_合并两个有序的数组
- IntelliJ IDEA 2018安装+激活+汉化(详细图解)
- SpringBoot与JPA
- Python sys.argv[]详解
- Redshift 2.6.41 for maya2018 水印去除
- 微端服务器物品备注,GOM引擎定制功能可视化仓库+物品备注脚本
- 仿微信实现拍摄视频,实现点击无声,自动录制
- 螺纹的规定,http://www.doc88.com/p-30089302852.html
- Ubuntu 16.04使用阿里云邮箱命令行发送邮件配置
- 假期归来,有哪些编程书上了新书榜?
- Angular +Ionic修改日期组件英文按钮
- [SQL注入][强网杯 2019]随便注(三种姿势)
- P9813驱动RGB灯珠
- 日照-公积金贷款逾期预测-比赛总结
- Outlook2019添加126邮箱方法
- apache 配置http跳转https