2012-08-05 4 views
1

protobuf-net을 사용하여 바이트 배열을 직렬화 한 다음 클라이언트 측 역 직렬화를 위해 소켓을 통해 보낼 수 있습니까? 내가 보내고있는 데이터를 압축/축소하는 효율적인 방법을 찾고있다. 누군가가 protobuf-net이 최선의 방법이라고 말했습니다. 어떻게 내가 그것에 대해 갈 수있는 어떤 생각?protobuf-net을 사용하여 바이트 배열을 직렬화하는 방법은 무엇입니까?

도움 주셔서 감사합니다.

+1

'byte []'는 스트림에 직접 보낼 수있는 유일한 데이터 유형입니다. 왜 왜 직렬화합니까? –

답변

1

Protobuf-net은 serializer이며 복잡한 객체 구조를 전선을 통해 전송할 수있는 기본 표현으로 줄이기위한 것입니다. 압축을 사용하지 않습니다. GZipStream과 같은 것을 사용하여 압축을 원할 경우. 사실, byte []의 protobuf 표현은 데이터의 길이 (varint)와 원래의 byte []입니다. 아니 protobuf 구현은 그것을 줄일 수 있습니다.

그래서 : 원래 바이트 [] "있는 그대로"을 보내거나 크기를 줄이려면 GZipStream과 같은 것을 사용하십시오. 이것이 항상 가능한 것은 아니며 일부 데이터 압축 도구의 경우 크기가으로 증가 할 수 있습니다.

+0

아, 죄송합니다. protobuf-net이하는 일을 오해했습니다. GZipStream 외에도 권장하는 압축 라이브러리가 있습니까? –

+0

@Joey DeflateStream? #ZipLib는 몇 가지 압축 구현을 제공합니다. –

0

7Zip (http://www.7-zip.org/sdk.html)의 LZMA SDK를 사용하여 protobuf 된 객체의 바이트 배열 표현을 압축/압축 해제하여 큰 발전을 이루었습니다. 예를 들어, 1114 바이트의 배열이 740으로 축소되었습니다. 그러나 Marc가 말했듯이, 귀하의 마일리지는 다를 수 있습니다.

관련 문제