2010-12-11 55 views
1

因此,对于一个项目,空间真正重要的真的很简单的问题,我希望能够写入文件的数量,其占用3个字节。所以基本上,这是一个无符号类型,其中16,777,215是可能的最高数字。有关创建非标准尺寸的字节组

数给出一个unsigned int,和我已经检查,以确保它是0和16,777,215之间。我如何超越?在Java中

代码是首选,但ANSI C也可以。谢谢!

+0

您可以使用C. _Without代码工会,所以这不是一个anwser._ – khachik 2010-12-11 20:47:21

+1

哇,你可以写一个三个字节值使用工会没有任何C代码的文件?我很佩服。 – 2010-12-11 20:49:27

+0

@Peter也许我没有得到你的玩笑,但OP询问了代码,而我现在很懒惰写下它:) – khachik 2010-12-11 20:52:19

回答

2

您可以尝试

int number = 
OutputStream os = 
os.write(number >> 16); 
os.write(number >> 8); 
os.write(number); 

要阅读

InputStream is = 
int number = ((is.read() & 0xFF) << 16) | ((is.read() & 0xFF) << 8) | (is.read() & 0xFF) 

然而,由于一个字节的成本是如此的微不足道,你必须拯救一个可怕的很多人,使增加的复杂性价值它。我只将它列入这里供您参考。

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. 

为了比较,在最低工资标准,(你会珍视自己的时间更高度)

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. 

这使得相当令人不安的建议,即其不值得按下一个键保存小于8 MB。你甚至可以得出结论,除非它节省了2 GB的磁盘空间,否则它不值一个简单的代码更改。 :P

+0

好吧,也许他正在编程电熨斗或洗碗机,或者只需要在手机中存储大量的数字:)总是有时候保存1个字节是有用的。 – 2010-12-11 21:11:08

+0

谁会说他将它们存储在磁盘上?也许他将数据存储在嵌入式闪存中。或者他也许关心I/O带宽。为什么放弃使用25%的I/O带宽的机会? – Gabe 2010-12-11 21:26:18

+0

如果他想让数字更小,他可以使用停止位编码。 (简单的压缩方法)这样数字可以只是一个字节。 – 2010-12-11 22:08:39

0

在C你总是可以投的* INT成*字符,然后写了至少3个字节显著。对于Big Endian,您可以跳过第一个字符并将其他三个字符写入小端,只写前三个字节。