Hi Torben, It is not amazing if binray streams result in a larger size, especially when saving simple scenes. A possible reason is because the ascii format will only record properties that are non-default, but the binary one always saves all the properties of a class.
By the way, please note that only the binary format supports compressor option. So the osgt and osgx files will not be affected by the zlib compressor. Wang Rui 2010/4/5 Torben Dannhauer <z...@saguaro-fight-club.de>: > Hi, > > I'm working again on my serializer problem and I don't unterstand why my > binary stream is as long as my ascii stream. binary should be smaller as > ascii I suppose > > My Testcode code is: > > Code: > > // Writing object to stream > std::stringstream myOstream; > std::string extension = "osgb"; > bool compressed = true; > osgDB::ReaderWriter* rw = > osgDB::Registry::instance()->getReaderWriterForExtension(extension.c_str()); > if ( rw ) > { > osgDB::ReaderWriter::WriteResult wr; > > if (extension == "osgb") > { > if (compressed) > wr = rw->writeObject( *test, myOstream, new > osgDB::Options("Compressor=zlib") ); > else > wr = rw->writeObject( *test, myOstream ); > } > > if (extension == "osgt") > { > if (compressed) > wr = rw->writeObject( *test, myOstream, new > osgDB::Options("Ascii Compressor=zlib") ); > else > wr = rw->writeObject( *test, myOstream, new > osgDB::Options("Ascii") ); > } > > if (extension == "osgx") > { > if (compressed) > wr = rw->writeObject( *test, myOstream, new > osgDB::Options("XML Compressor=zlib") ); > else > wr = rw->writeObject( *test, myOstream, new > osgDB::Options("XML") ); > } > > > if (!wr.success() ) OSG_NOTIFY( osg::WARN ) << "ERROR: > Save failed: " << wr.message() << std::endl; > } > else > OSG_NOTIFY( osg::WARN ) << "error getting readerWriter for > osgt" << std::endl; > > // Get size. > stringbuf *pbuf; > pbuf = myOstream.rdbuf(); > OSG_NOTIFY( osg::WARN ) << "PBUF Bytes available: " << > pbuf->in_avail() << std::endl; > OSG_NOTIFY( osg::ALWAYS ) << "STRING Bytes available: " << > myOstream.str().length() << std::endl; > OSG_NOTIFY( osg::ALWAYS ) << "STRING content: " << myOstream.str() << > std::endl; > > //Reading Stream to node > if ( rw ) > { > osgDB::ReaderWriter::ReadResult rr = rw->readObject( myOstream > ); > osg::ref_ptr<osgVisual::dataIO_transportContainer> test2 = > dynamic_cast<osgVisual::dataIO_transportContainer*>(rr.takeObject()); > if (test2) > { > OSG_NOTIFY( osg::WARN ) << "TEST::FrameID is: " << > test->getFrameID() << std::endl; > } > else > OSG_NOTIFY( osg::WARN ) << "Error converting stream to > Node" << std::endl; > } > > > > > > My Question is: What is the real stream size: > The value pbuf->in_avail() or the value myOstream.str().length()? > Because it always differs up to 60 bytes. > > My stream sizes ( myOstream.str().length() ) of my object ot transfer are: > > xml: 739 bytes > ASCII: 389 bytes > binaryy uncompressed: 353 bytes > binary compressed: 176 bytes > > Can anyone give me a hint what the problem in my serializer / stream usage, > that causes my binary stream to be as large as my ascii stream? > > Thank you very much! > > Cheers, > Torben > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=26454#26454 > > > > > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org