昨天在程序中向redis中存取对象,获取对象的时候遇到了一个问题,经过一番询问和查询相关资料终于弄明白了,认为有必要记录下来,对以后的自己或者其他人都有一定的帮助。我先把问题阐述一遍:对象A_model存取到redis中,但是从redis中获取后存取到B_model,即使A_model和B_model中变量都是一样的,但是依然会报java.lang.ClassCastException错误。导致会报java.lang.ClassCastException错误的根本原因是序列化的问题。经过定义的序列化存取到redis中,也把数据类型存取进去了,所以获取该key对应的数据的时候也必须是改数据类型。

 

下面是测试类:

package com.chr.test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.ycy.domain.User;
import com.ycy.domain.User_A;
import com.ycy.service.impl.UserOperationsServiceImpl;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:config/spring-context.xml",
        "classpath:config/redis-context.xml" })
public class RedisTest {

    @Autowired
    private UserOperationsServiceImpl userops;

    @Test
    public void Test1() {
//        System.out.println(userops.getUser("test"));
        Object user = userops.getUser("1");
        System.out.println(user);
    }
    
    @Test
    public void Test2() {
        //System.out.println(userops.getUser("a"));
//        System.out.println(userops.getUser("test"));
//        userops.add("test", "aaa");
        User user = new User();
        user.setId("1");
        user.setName("bb");
        user.setPassword("1234");
        userops.add(user);
    }
    
    @Test
    public void Test3() {
        //System.out.println(userops.getUser("a"));
        //System.out.println(userops.getUser("test"));
        userops.del("test");
    }
    
    @Test
    public void Test4() {
        User user = new User();
        user.setId("1");
        user.setName("bb");
        user.setPassword("1234");
        byte[] byt= serialize(user);
        Object obj=unserizlize(byt);
        User_A str;
        try {
            str = (User_A)obj;
            System.out.println(str);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(obj instanceof User){
            System.out.println(obj);
        }
        
    }
    
    
    //序列化 
    public static byte [] serialize(Object obj){
        ObjectOutputStream obi=null;
        ByteArrayOutputStream bai=null;
        try {
            bai=new ByteArrayOutputStream();
            obi=new ObjectOutputStream(bai);
            obi.writeObject(obj);
            byte[] byt=bai.toByteArray();
            return byt;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    //反序列化
    public static Object unserizlize(byte[] byt){
        ObjectInputStream oii=null;
        ByteArrayInputStream bis=null;
        bis=new ByteArrayInputStream(byt);
        try {
            oii=new ObjectInputStream(bis);
            Object obj=oii.readObject();
            return obj;
        } catch (Exception e) {
            
            e.printStackTrace();
        }
    
        
        return null;
    }
}
View Code

相关文章:

  • 2021-05-19
  • 2022-12-23
  • 2022-12-23
  • 2022-01-14
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-09-26
  • 2021-07-16
  • 2021-11-30
相关资源
相似解决方案