2011-11-09 2 views
9

스칼라에서 직렬화하고 싶습니다. sjson과 @serializable annotation을 보았습니다. 그러나 어떻게하면 1 가지 주요 장애물을 처리 할 수 ​​있는지 알 수 없었습니다. 라이브러리의 제네릭.쉬운 스칼라 직렬화?

예를 들어 Graph for Scala 라이브러리를 가져옵니다. 나는 그것을 코드에서 많이 사용하고 나중에 분석 할 수 있도록 내 코드 전체에 걸쳐 그래프를 포함하는 여러 객체를 디스크에 쓰고 싶습니다. 그러나, 여러 번 노드와 엣지 타입은 다른 클래스의 제네릭 타입 인자로 캡슐화되어 있습니다. 리플렉션을 처리하기 위해 라이브러리 자체를 수정하지 않고도 Type Classes (객체가 어떻게 보이는지에 따라 직렬화가 어쨌든 만족스럽지 않게 ...) 많은 수를 가져 와서 내 코드를 "지저분하게"하지 않고 어떻게 올바르게 직렬화 할 수 있습니까?

예,

class Container[N](val g: Graph[N,DiEdge]) { 
    ... 
} 

// in another file 
def myMethod[N](container: Container[N]): Unit = { 
    <serialize container somehow here> 
} 

답변

5

내 결과에 대해보고하기 위해 Java의 XStream은 놀라운 작업을 수행합니다. 제네릭이나 기타 모든 것이 추가 입력없이 자동으로 직렬화 될 수 있습니다. 직렬화를 빠르게 수행 할 수있는 방법이 필요하다면 XStream을 사용하십시오!

그러나 출력 XML은 사용자의 입력없이 간결하지 않습니다. 예를 들어 스칼라의 HashMap이 사용하는 모든 메모리 블록은 비록 대부분이 아무것도 포함하지 않아도 기록 될 것입니다!

2

당신이 스칼라에 대한 그래프를 사용하고 JSON이 직렬화 형식 인 경우, 직접 graph-json를 사용 할 수 있습니다.

여기는 code and the doc입니다.

+0

예, 저는 라이브러리에 대해 알고 있지만 핵심은 그래프가 훨씬 큰 퍼즐의 한 조각이라는 것입니다! – duckworthd