如果使用FileChannel.transferTo等方法获取的数据看似比传入的长度短时

2022-03-28 20:30:27 浏览数 (1)

首先看下这个方法的定义:

代码语言:javascript复制
public abstract long transferTo(long position, long count,
                                WritableByteChannel target)
    throws IOException

该方法可以将一个输入性FileChannel的数据传输到一个WritableByteChannel去,如果你打开WritableByteChannel文件发现可见数据比你传入的长度小时可以考虑下文件是不是有BOM标识符,BOM是用于标识该文件是大小端的标识符,因为BOM是存在文件头的一种不可见字符,所以你拷贝的数据很有可能包含了这几个标识符(比如你从0开始传递数据,文件中又有BOM标识符),但不一定是每个文件都有。如果是程序导出的utf-8编码文件是不会有这种标识符的,但是人为操作要读取的文件之后有可能会引入BOM标识符,如下图所示:

前面的EF BB BF就是UTF-8 BOM编码格式文件中三个BOM标识字符。

PS:

需要注意的是首先你要看下是不是读取的文件根本就没有那么多可视字符,比如只有1个字符,你愣是要读取10个字符,那么肯定不会如愿以偿的

0 人点赞