java - 是否有任何编码可以让我安全地在文件中写入和读取任何 8 位字符代码(整个 256 而不仅仅是 128)?

标签 java utf-8 compression

我正在尝试实现霍夫曼树压缩。它的工作原理几乎是为文本文档中最常见的字符提供 < 8 位代码,为不太常见的字符提供更大的代码。然后有一个编码的二叉树,可以让您向下导航,1 告诉您向左走,0 告诉您向右走,这将引导您找到字符。

很明显,有些 block 的长度不是 8 个字节。我一直在根据需要将它们四舍五入,并在末尾添加 0 并将它们转换为字符。然而,我刚刚发现java每个字符写入3个字节。因为这是关于压缩的,所以我显然需要一个字节。

问题是我不知道最终会尝试写入哪些字节。三个不同的 < 8 位代码可能会混合在一起。我需要能够将任何代码写入文本文件。然而,存在无效的字节序列,因此我的整个方法都被搞砸了。

有什么方法可以让任何字节序列在文件的某个部分中有效,并按字面意思存储它,而不用担心字符过早结束文件或导致另一个恶作剧?我在 Mac 上编码,所以这是一个问题,与 Windows 不同,Windows 中只在开头有文件的长度,因此不需要文件结束字符。

如果这里没有直接的解决方案,那么也许我可以制作自己的编码,该编码不会退出文件并将其嵌套在更常见的文件中?

最佳答案

这看起来是 Java Bitset 的一个很好的用例:https://docs.oracle.com/javase/8/docs/api/java/util/BitSet.html

将数据写入文件时,您应该输出已编码的值的数量,然后您只需要序列化的位流。

关于java - 是否有任何编码可以让我安全地在文件中写入和读取任何 8 位字符代码(整个 256 而不仅仅是 128)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56913160/

相关文章:

java - 如何在Java中压缩文件和文件夹?

algorithm - 压缩 uint32 的有序序列

java - 简单但反复出现的命名问题

java - 如何使用 guice 仅注入(inject)一个变量?

sql-server - 如何将 UTF-8 平面文件导入 SQL Server 2008 R2?

php - 在 HTML 内容中获取 "�"

java - 如何添加 ListFragment 使用到布局

java - 向 JFrame 添加多个按钮,文本+颜色未显示

linux - iconv 任何编码为 UTF-8

c++ - 用于无损压缩一系列屏幕截图的适当图像文件格式