2010-06-16 4 views
1

자바 HashMap을 문자열 표현으로 직렬화하고 싶습니다. HashMap에는 string 및 integer와 같은 프리미티브 값만 포함됩니다. 그 후에이 문자열은 db에 저장됩니다. HashMap을 복원하는 방법은 무엇입니까? BeanUtils 및 인터페이스 Converter을 사용하거나 JSON을 사용하는 것이 합리적입니까?String에서 HashMap으로 변환하는 가장 좋은 방법은 무엇입니까?

예를 들어

:

List list = new ArrayList(); 
    list.add(new Long(1)); 
    list.add(new Long(2)); 
    list.add(new Long(4)); 

    Map map = new HashMap(); 
    map.put("cityId", new Integer(1)); 
    map.put("name", "test"); 
    map.put("float", new Float(-3.2)); 
    map.put("ids", list); 

    map.toString() -> {float=-3.2,ids=[1, 2, 4],name=test,cityId=1} 
    map.toJSON ->  {"float":-3.2,"ids":[1,2,4],"name":"test","cityId":1} 
+0

사람들이 Hibernate를 사용하는 이유는 이것이 아닙니까? – CPerkins

+1

목록은 프리미티브가 아닙니다. objectinputstream과 objectoutputstream을 보셨습니까? –

답변

1

사용 JSON 또는 XStream.

+0

xml을 파싱하는 것이 JSON보다 비싸다. – eugenn

0

Dr Jerry가 맞습니다. ObjectOutputStream을 사용하여 해시 맵을 직렬화해야합니다. 이렇게하면 데이터베이스 BLOB 유형 열에 바이트를 쓰게되고 원래의 객체로 역 직렬화 할 수 있습니다. 피곤한 진부한 표현을 다시 사용하려면 왜 바퀴를 다시 발명해야합니까? 이 경우에 Java 직렬화를 사용하지 않으려는 특별한 이유가 있습니까?

+0

다른 사막화 문제를 일으키고 BLOB 유형을 사용해야하므로 바이너리로 직렬화하지 않는다. – eugenn

+0

BLOB를 사용할 수 없다면 OK JSON 방식과 마찬가지로 위대하지는 않지만 잘 작동합니다. 구글의 GSON은 당신을 속일 수있는 것처럼 보입니다. 자바 컬렉션 등을 지원합니다 ... 여기에서 확인하십시오 : http://sites.google.com/site/gson/gson-user-guide –