バイトバッファに整数と文字列を書き込もうとしています。その後、このバイト配列がハードドライブに書き込まれます。ループの中に最後の文字だけが書かれている文字列を書く時以外は、すべてうまくいくようです。私はそれをチェックしたので、文字列の解析が正しいように見えます。 これは私がbbuf.putステートメントを使う方法のようです。私は後に、それをフラッシュする必要がある、そしてなぜ.putInt文細かい作業を行い、バイトバッファに文字列を挿入する
//write the PCB from memory to file system
private static void _tfs_write_pcb()
{
int c;
byte[] bytes = new byte[11];
//to get the bytes from volume name
try {
bytes = constants.filename.getBytes("UTF-8"); //convert to bytes format to pass to function
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
ByteBuffer bbuf = ByteBuffer.allocate(bl_size);
bbuf = bbuf.putInt(rt_dir_start);
bbuf = bbuf.putInt(first_free_data_bl);
bbuf = bbuf.putInt(num_bl_fat);
bbuf = bbuf.putInt(bl_size);
bbuf = bbuf.putInt(max_rt_entries);
bbuf = bbuf.putInt(ft_copies);
for (c=0; c < vl_name.length(); c++) {
System.out.println((char)bytes[c]);
bbuf = bbuf.put(bytes[c]);
}
_tfs_write_block(1, bbuf.array());
}
2つの質問 - 1)ループの最大値は 'bytes.length'ではなく' vl_name.length'です。これは意図的ですか?もしそうなら、あなたは何を達成しようとしていますか? 2) 'bbuf.put(bytes)'や 'bbuf.put(bytes、offset、length)'だけを使ってみましたか? –
はい、意図的です。彼らは同じサイズなので、問題ではありません。コードをbbuf = bbuf.put(bytes)に変更しました。あなたが示唆したとおりですが、まったく同じことが起こります – Mark
デバッガやデバッグプリントで 'constants.filename'の値を調べましたか? 'blSize'は6つの4バイト整数と文字列を保持するのに十分な大きさですか? –