gpt4 book ai didi

java - 从文件中读取字节值、ASCII 和 UTF-16 字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:18 24 4
gpt4 key购买 nike

我正在尝试从 mp3 文件中读取 ID3v2.3.0 标签,并且值是混合类型。

例如,文件将以 3 个字符“ID3”开头,后跟两个值 3 和 0 的版本字节,标签的各个帧由 4 个 ASCII 字符标识符组成,后跟两个标志字节,然后是 4 个大小的字节,然后是作为 UTF-16 字符串的(文本)帧的内容。 example ID3 file

我不是很精通 java,有很多文件读取类,在这种情况下,我可以使用哪个最适合使用?

澄清一下,我希望能够读取(无符号)字节值、ASCII 字符数组和 UTF-16 字符数组(理想情况下来自相同的流/ channel /阅读器对象,或者至少不必关闭一个,创建另一个并跳到我的最后一个位置),我想尽可能避免单字节转换。

目前我正在使用 DataInputStream,因为它允许我读取无符号字节值和有符号字节数组。

最佳答案

Java 没有无符号字节,但您可以将它们作为带符号字节来读取,并且大多数时候它应该绝对没问题 - 如果您需要将它们视为整数值(而不仅仅是位桶),您可以使用:

int intValue = byteValue & 0xff;

有效地将它们视为无符号值。

至于文本部分:这取决于您了解存储的文本数据量的难易程度。在理想情况下,会有某种 header 值说明文本数据有多少字节。在那种情况下,您会将那么多数据读入字节数组,然后使用:

String text = new String(data, encoding);

在这种情况下,encoding 是“US-ASCII”或“UTF-16BE”或“UTF-16LE”(您需要从您的示例它看起来应该是 UTF-16LE)。

从示例文件中不清楚格式是否确实包含该信息——如果它只是一个以 NUL 结尾的字符串,它会稍微有点尴尬;在这方面,ASCII 和 UTF-16 都不是特别难处理,但从根本上说,必须边走边解码并不是那么好。

关于java - 从文件中读取字节值、ASCII 和 UTF-16 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8634729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com