最近项目中用到protobuf,特地研究了一下.protobuf主要是将对象序列化的一种协议,但是因为google加入了自己的算法该对象所占用的空间比较小。
个人也是按照下面的url进行测试:
http://www.cnblogs.com/dcba1112/archive/2011/05/01/2034028.html
1, 编译版本和jar版本应该一致,不然会出现不匹配的问题,该url下载编译工具
http://code.google.com/p/protobuf/downloads/detail?name=protoc-2.4.1-win32.zip&can=2&q=
http://code.google.com/p/protobuf/downloads/detail?name=protobuf-2.4.1.zip&can=2&q=
2. 客户端程序应该放和服务器端的运行在同一个应用程序中不然会出现一下问题:
An unexpected error has been detected by Java Runtime Environment:
#
# Internal Error (classFileParser.cpp:2923), pid=6084, tid=616
# Error: ShouldNotReachHere()
#
# Java VM: Java HotSpot(TM) Client VM (11.2-b01 mixed mode windows-x86)
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread (0x00846c00): JavaThread "Unknown thread" [_thread_in_vm, id=616, stack(0x008e0000,0x00930000)]
Stack: [0x008e0000,0x00930000]
[error occurred during error reporting (printing stack bounds), id 0xc0000005]
--------------- P R O C E S S ---------------
Java Threads: ( => current thread )
Other Threads:
=>0x00846c00 (exited) JavaThread "Unknown thread" [_thread_in_vm, id=616, stack(0x008e0000,0x00930000)]
VM state:not at safepoint (not fully initialized)
VM Mutex/Monitor currently owned by a thread: None
Dynamic libraries:
0x00400000 - 0x00424000 C:\Program Files\Java\jre6\bin\javaw.exe
0x7c920000 - 0x7c9b3000 C:\WINDOWS\system32\ntdll.dll
0x7c800000 - 0x7c91e000 C:\WINDOWS\system32\kernel32.dll
0x77da0000 - 0x77e49000 C:\WINDOWS\system32\ADVAPI32.dll
0x77e50000 - 0x77ee2000 C:\WINDOWS\system32\RPCRT4.dll
0x77fc0000 - 0x77fd1000 C:\WINDOWS\system32\Secur32.dll
0x77d10000 - 0x77da0000 C:\WINDOWS\system32\USER32.dll
0x77ef0000 - 0x77f39000 C:\WINDOWS\system32\GDI32.dll
0x76300000 - 0x7631d000 C:\WINDOWS\system32\IMM32.DLL
0x62c20000 - 0x62c29000 C:\WINDOWS\system32\LPK.DLL
0x73fa0000 - 0x7400b000 C:\WINDOWS\system32\USP10.dll
0x7c340000 - 0x7c396000 C:\Program Files\Java\jre6\bin\msvcr71.dll
0x6d800000 - 0x6da56000 C:\Program Files\Java\jre6\bin\client\jvm.dll
0x76b10000 - 0x76b3a000 C:\WINDOWS\system32\WINMM.dll
0x6d290000 - 0x6d298000 C:\Program Files\Java\jre6\bin\hpi.dll
0x76bc0000 - 0x76bcb000 C:\WINDOWS\system32\PSAPI.DLL
0x6d380000 - 0x6d3a9000 C:\Program Files\Java\jre6\bin\jdwp.dll
0x6d6a0000 - 0x6d6a6000 C:\Program Files\Java\jre6\bin\npt.dll
0x6d7b0000 - 0x6d7bc000 C:\Program Files\Java\jre6\bin\verify.dll
0x6d330000 - 0x6d34f000 C:\Program Files\Java\jre6\bin\java.dll
0x6d7f0000 - 0x6d7ff000 C:\Program Files\Java\jre6\bin\zip.dll
VM Arguments:
jvm_args: -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:4727 -Dfile.encoding=GB18030 -Xbootclasspath:D:\TOOLS\SDK\android-sdk-windows2.2\android-sdk-windows\platforms\android-8\android.jar
java_command: com.tv.app.protobuf.ProtoBufServer
Launcher Type: SUN_STANDARD
Environment Variables:
JAVA_HOME=C:\Program Files\Java\jdk1.5.0_06
PATH=C:/Program Files/Java/jdk1.5.0_06/bin/../jre/bin/client;C:/Program Files/Java/jdk1.5.0_06/bin/../jre/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\TortoiseSVN\bin;D:\TOOLS\SDK\android-sdk-windows2.2\android-sdk-windows\tools;C:\Program Files\IDM Computer Solutions\UltraEdit-32;D:\TOOLS\ant-1.7\ant\bin;
USERNAME=chrbu
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel
--------------- S Y S T E M ---------------
OS: Windows XP Build 2600 Service Pack 3
CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 7 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3
Memory: 4k page, physical 2097151k(1716192k free), swap 4194303k(3669164k free)
vm_info: Java HotSpot(TM) Client VM (11.2-b01) for windows-x86 JRE (1.6.0_12-b04), built on Jan 17 2009 09:57:14 by "java_re" with MS VC++ 7.1
time: Fri Aug 26 16:09:29 2011
elapsed time: 0 seconds
3. 我用2.4的protoc出现下面问题:
E:\workspace\ProtoBuf\src\addressbook.proto: File does not reside within any path specified using --proto_path (or -I). You must specify a --proto_path which encompasses this file. Note that the proto_path must be an exact prefix of the .proto file names -- protoc is too dumb to figure out when two paths (e.g. absolute and relative) are equivalent (it's harder than you think)
不知道谁能解决