【发布时间】:2020-09-19 14:49:16
【问题描述】:
我正在为我的 .NBS(Note Block Studio 歌曲文件)编辑器创建一个辅助类,在编写将 .NBS 文件加载到结构中的部分时,我遇到了一个非常奇怪的 DataInputStream 跳过行为。例如,如果作者姓名是“Wattana”,它将显示为“attana”,我必须将跳过减少到 3 个字节。为什么在song_author 之前跳过4 个字节会跳过字符串中的第一个字符,而在song_name 之前跳过则不会?
(帮助类的部分代码)
public static SongData to_song_data (DataInputStream data_stream) {
// Specifications for the NBS file format can be found at https://opennbs.org/nbs
data_stream.set_byte_order (DataStreamByteOrder.LITTLE_ENDIAN);
var song_data = new SongData();
// Note to self: a "short" is 2 bytes(16 bits) long.
// TODO: Add error handler.
song_data.old_version = data_stream.read_int16 ();
song_data.version = data_stream.read_byte ();
song_data.vanilla_intrument_count = data_stream.read_byte ();
song_data.length = data_stream.read_int16 ();
song_data.layer_count = data_stream.read_int16 ();
data_stream.skip (4); // 4 bytes(32 bits) must be skipped before reading any string from an NBS file.
song_data.song_name = data_stream.read_line ();
data_stream.skip (3); // Not sure why 4 bytes skip doesn't work here.
song_data.song_author = data_stream.read_line ();
return song_data;
}
【问题讨论】:
-
您是否使用十六进制转储验证该文件实际上包含应该跳过的 4 个字节?