I'm working on a game which could potentially generate rather large save files, and so I'd like to find the smallest (most efficient, if you will) method of saving the game's data. I would need to save block types along with entity positions. Would a binary approach generate a smaller file than a text-based one? If so, how do I store the binary data?
It's not just about storage efficiency (and with today's disk sizes it could be argued that storage efficiency is among the least of your concerns), it's also about how fast it is to load data and how easy it is to translate your loaded data into something you can use.
For speed of loading, binary wins hands-down. It can be just as simple as a single fread into a previously allocated pointer, then your data is loaded and you're ready to go.
For translating that into something you can actually use, I'd argue that's more of a design issue than a format issue. If you build a design that requires complex and involved serialization, then it's going to require complex and involved serialization, irrespective of whether you use text or binary. On the other hand if you design simpler, then binary can win again - that single fread can result in everything you need loaded and correctly in-place, compared to having to write and debug a text-parser.
If despite this you still opt for text, then I'd advise that you at least design a single common format that you can run through a single common parser, otherwise you'll end up with multiple different, specialized, and useless-for-anything-else text-parsers in your code. Which is OK if you like writing text-parsers but not OK otherwise.
Ultimately it's up to you. Text does have the oft-cited advantage of being human-readable, but is that important for what you want to achieve? Are you designing a format to be read by humans or read by a machine? If you want human-readability then text is the way to go, if you don't need it then you should seriously consider binary.