안드로이드에서 사용되는 패커블과 직렬화의 차이점은 무엇인가요?

정확히 알고 싶습니다,

  1. 한 활동에서 다른 활동으로 데이터를 보낼 때 '소포장' 또는 '직렬화' 기법을 사용해야 하나요? 를 사용해야 하나요?
  2. 둘 중 하나를 사용하여 데이터를 전송해야합니까?

  3. 언제 사용해야합니까?
  4. 그리고 그들과 성능의 정확한 차이점 자바 측면에서 둘 다.

미리 감사드립니다.


 public class GetSetClass implements Serializable {
    private int dt = 10;

    /** pass any object, drwabale */
    public int getDt() {
        return dt;
    }

    public void setDt(int dt) {
        this.dt = dt;
    }
}
질문에 대한 의견 (3)

이러한 개념은 프로세스 간 통신 (IPC) 와 관련된.

간에 데이터를 보낼 때, 우리는 두 개의 응용 프로그램이 있는지 확인하기 위해 애플리케이션과도 전송되는 데이터 형식을 모두 알아야 합니다.

원시 자료형 값 클래스와 같은 때 특히 비사양 보내는 두 개 사이에 우리가 이해할 수 있는 형식으로 변환할 운영 체제, 응용 프로그램 객체. S 는 프리미티브 만 번 유형 (정수, 문자 등). 그 이유는 우리가 변환은 O. 의 통신 채널 데이터를 전송하는 데.

이 변환하는 과정을 통해 다른 응용 프로그램 간 통신 채널을 프리미티브를 비사양 프리미티브 유형 및 보내기 등 일부 호출됨 직렬화하지. 역동기화에 프로세스 호출됨 as De 직렬화하지.

자바 가상 머신 (jvm) 에 대한 의존도가 높은 시리얼화가 가능합니다 직렬화하지, ipc 다릅니다. 그러나 데스크톱 응용 프로그램에 의해 고안되었습니다 렉시한테서 직렬화하지 마음. Ipc 는 모바일 애플리케이션을 수행하는 경우 우리는 너무 무겁게 있는지 확인하기 위해 IPC 는 프로세스를 없습니다.

간단히 말해 IPC 는 무거운 직렬화하지 대한 개념. 그래서 대신 안드로이드 바인더는 달성하기 위한 경량 프로세스 간 통신을 위한 직렬화하지 선택했다. 내부적으로 바인더 필지, IPC 할 수 있는 방법이 다릅니다. 필지 경량 시리얼화가 가능합니다 있다. 필지) 에 대한 스트리밍합니다 마샬링하지 객체에는 바이트입니다 사용하는 것이 좋습니다.

참고: Ipc 과도하게 의존하는 것을 확인할 수 있도록 바인더 공유 메모리 개념은 데이터 복제에서는 응용 프로그램 간의 공유하면서 없다.

해설 (2)
해결책

한 활동에서 다른 활동으로 데이터를 전송할 때 소포장 기법을 사용해야 하는지 직렬화 기법을 사용해야 하는지 궁금합니다.

인텐트를 통해 기본 유형이 아닌 데이터/객체를 다른 활동으로 보내는 경우 해당 객체에 대해직렬화하거나패키서블을 구현해야 합니다. 성능에 영향을 미치지 않기 때문에 선호되는 기술은Parcelable`입니다.

둘 중 하나를 사용하여 데이터를 전송하는 것이 필수인가요? / 언제 사용해야 하나요?

원시 유형이 아닌 데이터 객체를 전송할 때만 필수/사용됩니다.

그리고 자바 측면에서 두 가지의 정확한 차이점과 성능.

직렬화는 성능에 영향을 미칩니다. 자세한 내용은 이 링크 https://stackoverflow.com/questions/9323044/android-parcelable-and-serializable 를 확인하세요.

해설 (3)

아주 좋은 잡을라는데 페르세우이블 차이를 설명 및 직렬화하지.

비록 그 오랜 시간 동안 다른 질문을 받고 시작하는 것이 도움이 될 수도 있습니다.

&gt. 1. 표시할지를 페르세우이블 직렬화하지 기법을 사용하여 데이터를 하나의 어플라이언스에서 활동 또는 기타 송신용입니다 합니까?

Ans. 가장 좋은 페르세우이블 솔루션으로서의 (나중에 이유를 설명했다.

&gt. 2. 하는 것은 그 중 하나를 사용하여 데이터를 하나의 어플라이언스에서 송신용입니다 다른?

Ans. 예, 데이터 전송 (객체) 를 쓸 수 있는 다른 单捞磐啊 1 바이트 스트림을 통해 페르세우이블 인컨텍스트 수행됨 및 읽어들입니다 및 또는 직렬화하지.

&gt. 3. 포락선으로 사용할 때 합니까?

Ans. 이 부분은 너회가 아르디 답변됨 이리에, 반군지역 데이터를 하나의 어플라이언스에서 다른 활동.

&gt. 4. 및 정확한 성능 차이, 그리고 두 명은 자바 가상 머신 (jvm) 에 애스펙트에서.

Ans. 1. 안드로이드 SDK 에 잘 문서화했습니다 페르세우이블. 반면 직렬화하지 자바 가상 머신 (jvm) 에 사용할 수 있습니다.

  1. 페르세우이블 에서 코드 개발자는 사용자 정의 및 운원수링 비해 덜 쓰기 때문에 마샬링하지 tcpg 쓰레기요 객체에는 직렬화하지. 페르세우이블 직렬화하지 비해 성능이 대폭 향상 (약 2 배 빠른), 이 때문에 사용자 정의 구현.

  2. 직렬화하지 는 사용자 요구 사항에 따른 데이터 보안관님 표시자가 인터페이스입니다 알 수 없습니다. 자바 가상 머신 (JVM) 에 있는 한 마샬링하지 작업이 수행되는 직렬화하지, Java API 를 사용하여 반사. 따라서 자바 객체를 생성하는 식별했습니까 구성원 및 비헤이비어를 motor1.1end 백업하도록 뿐만 아니라 많은 쓰레기요 객체에는. 이 때문에 직렬화하지 프로세스는 느린 비해 페르세우이블.

오토메이티드 출처: 이 링크

직렬화하지 설명 볼 수 있다.

해설 (0)

자바 직렬화 가능:- Serializable은 표준 Java에서 제공되며, 구현하기가 훨씬 쉽습니다. Serializable 인터페이스를 구현하고 두 가지 메서드에 대한 오버라이드를 추가하기만 하면 됩니다. Serializable의 문제점은 태양 아래 모든 것을 적절히 처리하려고 하고 직렬화되는 유형을 결정하기 위해 많은 반사를 사용한다는 것입니다. 그래서 그것은 비프한 객체가 됩니다.

해설 (1)

패샐링과 직렬화는 모두 데이터를 마샬링 및 언마샬링하는 방법입니다. 안드로이드에서는 컴포넌트와 프로세스 간에 원시적이지 않은 데이터 유형을 전달하는 데 사용됩니다. 일반적으로 안드로이드는 직렬화 가능 또는 패샐링 가능한 객체를 허용하므로 방법을 선택할 수 있습니다. 예외는 AIDL 인터페이스입니다. 객체를 전달/반환하려면 패샐 가능이어야 합니다.

직렬화는 리플렉션을 사용하여 데이터를 자동으로 마샬링 및 언마샬링합니다. 대부분의 경우 마커 인터페이스를 구현하는 것만으로도 충분하지만, 패캐싱을 사용하면 데이터를 마샬링 및 언마샬링하는 코드를 직접 작성해야 합니다.

따라서 패캐싱이 더 빠른 이유입니다. 필드를 검색하기 위해 객체를 반영할 필요가 없기 때문에 속도가 느려집니다.

직렬화에는 버전 관리 기능도 내장되어 있습니다. 마샬링된 객체 클래스의 다른 버전으로 언마샬링을 시도하면 예측 가능한 방식으로 프로세스가 실패합니다. 패캐싱을 사용하면 동일한 작업을 수행할 수 있지만 객체에 버전 필드를 추가하고 언마샬링 시 버전을 확인하는 코드를 추가하여 직접 구현해야 합니다.

즉, 저는 일반적으로 직렬화를 사용합니다. 간단한 객체의 경우 차이를 느끼지 못할 것입니다. 개발 후반에 성능 문제가 발견되면 언제든지 소포화를 사용하도록 변경할 수 있습니다.

해설 (0)