我嘗試通過ByteBuffer訪問byte []以表示我定義的文件類型。 byte []中的第一個位置包含一些元數據,並通過位操作進行處理。所以它們根本不代表字符。用ByteBuffer處理byte []
我想在某個固定位置添加文件數據(字符)。
byte[] file_portion
包含大文件的一部分:開始部分。其中包含元數據頭。 content
是一個包含我想要添加到該緩衝區的信息的字符串。 start_pos是保存來自內容的新文件數據的第一個位置。
ByteBuffer my_content = ByteBuffer.allocate(this.file_portion.length);
content_buffer.wrap(this.file_portion);
for (int i = 0; i < content.length(); i++) {
char tmp = content.toCharArray()[i];
my_content.put(this.start_pos + i, (byte) tmp)
}
如果我重新映射這個我得到一個垃圾emptyness:
CharBuffer debug = my_content.asCharBuffer();
System.out.println("debug " + debug);
我能理解,如果第一位置顯示損壞的字符...但沒有一個位置是正確的。
除了這個bug,'content.toCharArray()[i]'很醜,你在每次循環迭代中都分配一個新的char數組。在外部構建char數組,或使用'content.charAt(i)' – leonbloy