【发布时间】:2019-10-05 00:50:45
【问题描述】:
所以我目前正在研究 lzw 算法以了解压缩,我想知道是否可以写入具有自定义大小位的文件。
所以我正在使用 DataOutputStream,我只能用 8、16 和 32 位写入,但我想知道是否可以写入 20 位以节省空间。我所说的节省空间的意思是当我压缩我的文件时,我的代码是 19 位的,所以我不想用 writeInt() 把它们写成 32 位,我想用 20 位来写它们,这样压缩的文件会更小。
【问题讨论】:
-
不是 100%(只有 98%)肯定,但纯 java 不可能。您可以写入/读取输入流的数据的最小部分是字节 - 因此无法存储由 8 位段组成的 20 位。 24 是最接近的。我认为这在本机文件系统中甚至是不可能的,因为扇区(因此数据块)总是 2 的力量
-
一种方法是将您的数据压缩成一个
long[],其中每个long可以保存多个数据。我在library that I've created 中为无关的事情做了类似的事情。您也许可以根据自己的尝试进行调整。 -
@Antoniossss 我如何设法获得 24 ?我没有看到任何 24 位的原始类型
-
ImageOutputStream 可以做到这一点。将 File 或 OutputStream 作为参数传递给创建方法。
-
@guillaume 只使用 3 个字节
标签: java bit file-writing file-read