2009-02-05 2 views
0

나는 자바 간단한 구조체의 큰 배열이 (단지 원시 명으로 구성) 나는 자바를 구현,속도 : 자바 직렬화 또는 CSV?

  • 저장에서와 것입니다 무엇 빠른 파일

    로로드해야합니다. io.Serializable 및 toString()/ toCSV를 오버라이드 읽기/의 writeObject 또는

  • ()를 사용 , 새로운 생성자를 추가하고 텍스트 파일을 읽고 쓰는가?



나는이 단계에서 이진 스트림을 피하려고.

답변

5

일반적으로 직렬화가 더 빠릅니다. 파일을 다시 읽을 때 파일을 수동으로 파싱하는 시간을 절약 할 수 있습니다. 그러나 CSV 방식은 시간이 지남에 따라 유연 해지고 프로그램이 다르게 구현됩니다.

+1

+1 앞으로는 훨씬 더 유연하고 유지 보수가 용이 한 CSV를 사용할 때 (그리고 구현 버전 중 하나 인 serialVersionUID 문제 등). –

4

샘플 테스트를 작성하고 어느 것이 더 빠른 지 알아볼 것을 권합니다.

+1

아마도 너무 쉬운 것 같습니다. 다른 사람들의 시간 낭비 대신에 여기 물어 봅시다! \ o/ – Bombe

+0

+ 1 테스트의 경우 어느 쪽이든 알고리즘 속도가 같기 때문에 상수에 따라 달라집니다. 테스트는 유일한 방법입니다 –

1

최종 응용 프로그램에 따라 XStream (또는 유사한 라이브러리)을 사용하여 XML을 내보내거나 가져올 수도 있습니다.

+1

XML 경로를 사용하면 (보통은 가장 빠르지 않습니다) 강력하게 JAXB를 제안합니다. 주로 (Java 6 SE에 포함되어 있기 때문에) 뛰어난 매핑 기능을 가지고 있으며 생성 된 코드로 코드를 망칠 필요가 없습니다. –

+0

이것은 Java6을 전제로합니다. 내 프로젝트가 Java6으로 이동할 때 조사 할 가치가 있습니다. (Websphere 종속성으로 인해 현재 5에 있습니다.) – Mikezx6r

+0

JAXB는 Java5에서도 사용할 수 있으며 필요하지 않습니다. JAXB에서는 +1이 필요하지만 XStream도 좋습니다. – StaxMan

1

Java 직렬화는 파일에서 읽고 객체를 수동으로 인스턴스화하는 것보다 실제 비 직렬화 단계를 더 빨리 수행 할 수있는 많은 작업을 수행합니다. 하지만 '심각한'작업을 위해 직렬화를 사용하려고한다면 Josh Bloch의 'Effective Java'와 먼저상의해야합니다.이 주제에 대해 전체 장을 다룬 것입니다.

그러나이 작업을 원샷으로 수행하고 실행 사이에 직렬화 된 클래스의 형식을 변경 (예 : 메소드 또는 필드 추가 없음) 할 필요가 없다면 아마 괜찮을 것입니다.

질문에 대한 오해가있을 수도 있습니다. '무엇이 더 빠를 것인가'라는 질문은 을 구현하는 데 더 빠른 접근법이 무엇인지 궁금해 할 수도 있습니다.을 구현하십시오. 아마 당신이 이미 가장 잘 알고있는 것 일거야.

3

여기에는 많은 대안이 있습니다. Protocol Buffers을 사용하는 것이 좋습니다. 은 매우이며 플랫폼에 독립적입니다.

+0

불행히도 PB는 엄격한 스키마 바인딩이므로 PB가 적합하지 않을 수 있으며, 오해가 아닌 한 표준 유형이 쌓여 있다고 제안합니다. 또한 POJO/래퍼가 아닌 PB 생성 유형을 사용해야합니다. – StaxMan

1

아마도 상관 없습니다. 배열이 메모리에 저장할 수있을만큼 작 으면 아마 매우 빨리 쓸 수 있습니다. 응용 프로그램에서 데이터를 한 번만 쓰면 가장 쉬운 것이 무엇이든 쓸 것입니다.

반면에 응용 프로그램이 오래 사용되고 지속적으로 데이터를 읽고 쓰면 최적화를 원할 것입니다.

0

필자는 CSV 파일로 수행 할 수있는 직렬화 작업을 많이 수행했습니다.

직렬화의 이점은 속도, 유형 안전성 및 상호 운용성 (RMI, EHcache 등)입니다. 단점은 객체를 버전화하고 뷰어 작성 (검사 가능)이 필요하다는 것입니다.

CSV는 느리고 크기가 더 클 수 있습니다. 위쪽은 텍스트 편집기, Excel 등에서 볼 수 있습니다.

속도 나 크기가 문제가 아니라면 CSV로 이동합니다.

XStream을 사용하여 XML 또는 JSON으로 쓸 수도 있습니다.

0

왜 이러한 선택을해야합니까? 명백한 후보자는 Jackson 또는 Google-GSON으로 간단한 데이터 바인딩을 사용하여 JSON이됩니다. 손으로 쓴 CSV보다 읽기 쉽고 빠릅니다. CSV가 처리 할 수없는 경우를 처리합니다. JDK의 직렬화보다 가능성이 높고,보다 유연하다 (클래스가 가장 작은 경우에도 클래스가 변경되면 직렬화가 까다로울 수있다).