我尝试通过ByteBuffer访问byte []以表示我定义的文件类型 . byte []中的第一个位置包含一些元数据,并通过位操作进行处理 . 所以他们根本不代表一个字符 .
我想在某个固定位置添加文件数据(例如字符) .
byte[] file_portion
包含大文件的一部分:开头部分 . 其中包括元数据的标头 . content
是一个包含我想要添加到该缓冲区的信息的String . 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)
}
如果我重新映射这个,我得到一个垃圾和空虚:
CharBuffer debug = my_content.asCharBuffer();
System.out.println("debug " + debug);
我能理解,如果第一个位置显示损坏的字符......但是没有一个位置是正确的 .
2 回答
如果要将字符添加到ByteBuffer并期望它们可以通过CharBuffer视图读取,那么您应该使用putChar(...)而不是put(...) .
EDITED :根据OP评论 .
例如:
否则,CharBuffer会将两个连续字节作为单个字符读取 . 现在,cbuf缓冲区将开始在字节缓冲区停止的同一点加载字符 . 加载所有字符后,您的原始ByteBuffer将定位到下一个位置 . 希望这是你正在寻找的 .
你知道在Java中一个char占用两个字节吗?