Json序列化和Jdk序列化在存储上的对比?

Json序列化和Jdk序列化在存储、效率上的对比?
在之前学习Redis时,我了解的是Json序列化比原生Jdk更高效,占用空间更小,所以无脑选择Json序列化。

但是最近我在看Pig开源框架中Oauth2的时候,发现存入Token令牌居然是用的Jdk序列化方式,我很疑惑,于是自己再用Json的方式去存,看看到底会有什么区别。
结果发现Json方式占用空间比Jdk的大了很多(Jdk为17)。

我又尝试别的数据,分别用Json和jdk试试,这里Json序列化占用内存更小,为什么会出现这样的情况?


以下是测试的方法:

@SpringBootTest

public class RedisSerializerTest {

@Autowired

RedisTemplate redisTemplate;

@Autowired

ObjectMapper objectMapper;

@BeforeEach

void initRedisTemplate() {

redisTemplate.setKeySerializer(new StringRedisSerializer());

redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer());

redisTemplate.setHashKeySerializer(genericJackson2JsonRedisSerializer());

redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer());

}

@BeforeEach

void initObjectMapper() {

objectMapper = new ObjectMapper();

objectMapper.registerModule(new JavaTimeModule());

}

@Test

void testRedis() throws JsonProcessingException {

ComplexObject complexObject = createComplexObject();

redisTemplate.opsForValue().set("testSerailizerByJson:1",complexObject );

redisTemplate.setValueSerializer(RedisSerializer.java());

redisTemplate.opsForValue().set("testSeralizerByJdk:1", complexObject);

}

ComplexObject createComplexObject() {

ComplexObject complexObject = new ComplexObject();

complexObject.setName("Test Name");

complexObject.setAge(30);

complexObject.setHobbies(Arrays.asList("Hobby1", "Hobby2", "Hobby3"));

Map<String, String> attributes = new HashMap<>();

for (int i = 0; i < 1000; i++) {

attributes.put("Attribute" + i, "Value" + i);

}

complexObject.setAttributes(attributes);

complexObject.setLargeString("This is a large string to increase the size of the object...");

return complexObject;

}


回答:

JSON

基于字符,于是非字符的东西占用空间更多,比如数字,比如二进制,比如 bool
因为是字符所以可读,可编辑
另外是一种语言无关的格式,啥程序都能读

JDK 序列化

相比于其他二进制序列化,存了类型等等一些额外的东西,所以也没高效多少,但是因为是二进制的,所以存二进制数据相对更省空间
但是这玩意只有 Java程序可以读,而且只能程序读,直接看数据基本看不明白是啥,更不用说修改

以上是 Json序列化和Jdk序列化在存储上的对比? 的全部内容, 来源链接: utcz.com/p/945522.html

回到顶部