So for a project that space really matters in, I'd like to be able to write to a file a number which takes up THREE bytes. So essentially, an unsigned type where 16,777,215 is the hig开发者_如何学Chest possible number.
The number is given as an unsigned int, and I've already checked to ensure it's between 0 and 16,777,215. How do I go beyond that?
Code in Java is preferred, but ANSI C works too. Thanks!
You can try
int number =
OutputStream os =
os.write(number >> 16);
os.write(number >> 8);
os.write(number);
To read
InputStream is =
int number = ((is.read() & 0xFF) << 16) | ((is.read() & 0xFF) << 8) | (is.read() & 0xFF)
However, given the cost of a byte is so trivial, you have to save an awful lot of them to make the added complexity worth it. I only included it here for your information.
2 TB of disk space is worth about $100
1 GB is worth about 5 cents
1 MB is worth about 0.005 cents
1 KB is worth about 0.000005 cents.
1 B is worth about 0.000000005 cents.
For comparison, at minimum wage, (You may value your time more highly)
1 minute of your time, 12 cents. ~2 GB.
1 second, 0.2 cents. ~40 MB.
1 key, 0.2 seconds, 0.04 cents ~8 MB.
1 blink. 0.05 seconds, 0.01 cents ~2 MB.
This makes the rather disturbing suggestion that its not worth pressing one key to save less that 8 MB. You might even come to the conclusion that its not worth one simple code change unless it saves 2 GB of disk space. :P
In C you could always cast the *int into a *char and then write the 3 least significant bytes. For Big Endian, you skip the first char and write the other three, for little endian, you just write the first three bytes.
精彩评论