Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于创建非标准大小字节组的一个非常简单的问题_Java_C_Byte - Fatal编程技术网

Java 关于创建非标准大小字节组的一个非常简单的问题

Java 关于创建非标准大小字节组的一个非常简单的问题,java,c,byte,Java,C,Byte,所以对于一个空间非常重要的项目,我希望能够将一个占用三个字节的数字写入一个文件。因此本质上是一个无符号类型,其中16777215是可能的最高数字 这个数字是以无符号整数形式给出的,我已经检查过了,以确保它在0和16777215之间。我该如何超越这一点 首选Java代码,但ANSI C也可以。谢谢 你可以试试 int number = OutputStream os = os.write(number >> 16); os.write(number >> 8); os.w

所以对于一个空间非常重要的项目,我希望能够将一个占用三个字节的数字写入一个文件。因此本质上是一个无符号类型,其中16777215是可能的最高数字

这个数字是以无符号整数形式给出的,我已经检查过了,以确保它在0和16777215之间。我该如何超越这一点

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

你可以试试

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)
相比之下,在最低工资的情况下,(你可能更看重你的时间)


这就提出了一个相当令人不安的建议,即不值得按一个键来节省8 MB的内存。您甚至可能会得出这样的结论:如果不节省2 GB的磁盘空间,那么一次简单的代码更改就不值得了P

在C语言中,您可以将*int转换为*char,然后写入3个最低有效字节。对于Big-Endian,您跳过第一个字符并写入其他三个字符;对于little-Endian,您只需写入前三个字节

您可以在C中使用联合。无需代码,因此这不是anwser。哇,您可以使用联合将三字节值写入文件,而无需在C中使用任何代码??我印象深刻。@Peter也许我没听清你的笑话,但OP问起了代码,我现在懒得写:)@Peter+1非常有趣!;)@卡奇克,这是一个玩笑。我想你只考虑了问题的一小部分,并说这不需要代码嗯,也许他正在为电熨斗或洗碗机编程,或者只是需要在手机中存储大量的数字:)总有这样的情况,每次保存1个字节是有用的。谁能说他正在将它们存储在磁盘上?也许他正在把数据存储在嵌入式闪存中。或者他担心I/O带宽。为什么要放弃减少25%I/O带宽的机会?如果他想让数字变小,他可以使用停止位编码。(一种简单的压缩方法)这样数字就可以只有一个字节。@Gabe,有时候你不得不使用这样的东西;当您与需要3字节值的库接口时。e、 g.RGB(24位颜色),这就是我包含解决方案的原因。然而,我想说清楚,除非你做了很多,否则节省一些磁盘空间是不值得的。e、 十亿是一个可能的数字。@Nikita Rybak,1GB的闪存价格高达3美元,这意味着30KB的成本为0.01美分(以最低工资眨眼所需的时间);)
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.