1
소포를 안드로이드 응용 프로그램에 소켓을 통해 보내려고합니다. 클라이언트는 libbinder (C++)에 있고 서버는 소포를 다시 만들어야하는 안드로이드 응용 프로그램입니다. 나는 한동안 해결책을 찾고 있었지만, 소포를 직렬화하고 서버 측에서 다시 빌드하는 방법을 모른다. 이것이 어떻게 수행 될 수 있는지에 대한 아이디어가 있습니까?소포를 통해 소포
감사
내가이
send(client, b, sizeof(b), 0);
서버처럼 보내
클라이언트
Parcel parc = Parcel();
double three = 5.5;
parc.writeDouble(three);
unsigned char b[sizeof(parc)];
std::memcpy(b, &parc, sizeof(parc));
그런 다음 데이터를 처리하는 코드의 일부
private int count
private InputStream in = null;
try {
in = socket.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
try {
count = in.read(bytes);
}catch (IOException e) {
e.printStackTrace();
}
Parcel parcel = Parcel.obtain();
parcel.unmarshall(bytes, 0, bytes.length);
parcel.setDataPosition(0);
double d = parcel.readDouble();
Log.v("----double---", "double" + d);
그래서 ...이 예제에서 깨달은 것부터 unmarshall 함수를 사용하여 바이트 배열에서 구획을 다시 빌드 할 수 있습니다. 클라이언트 측에서 소포를 직렬화하는 방법에 대한 아이디어, libbinder (C++)? –
가장 쉬운 방법은 [Parcel' 클래스의 소스 코드] (http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1)를 보는 것입니다. /android/os/Parcel.java#Parcel.writeByte%28byte%29). 기본적으로 직렬화 된 바이트 스트림입니다. 메소드'writeValue()'를 보라. 각 항목에 대해 항목이 무엇인지 나타내는 코드를 작성한 다음 항목의 직렬화 된 항목이 표시됩니다. 서로 다른 여러 알려진 유형을 소포하고 바이트 스트림을 덤프하는 간단한 프로그램을 만듭니다. 당신은 그것을 알아낼 수 있어야합니다. –
Parcel.cpp의 소스 코드는 다음에서 찾을 수 있습니다. https://android.googlesource.com/platform/frameworks/native/+/jb-mr1-release/libs/binder/Parcel.cpp libbinder를 사용하는 경우 'Parcel' 클래스를 직접 사용할 수 있어야합니다. –