我有一个RandomAccessFile raFile,我将从中将数据读取到固定大小的块中的缓冲区中:

byte[] fileBuffer = new byte[BUFFER_SIZE];

while((readBytes = raFile.read(fileBuffer) >= 0) {
    String bufferStr = new String(fileBuffer, 0, readBytes);
    String testerStr = new String(fileBuffer);

    System.out.println(readBytes+","+bufferStr.length()+","+testerStr.length());
}


我期望的是raFile.read()读取与BUFFER_SIZE一样多的字节(文件末尾除外),并且将相同的值复制到readBytes。尽管大多数情况都是如此,但偶尔我会得到BUFFER_SIZE为4096的以下输出:

readBytes bufferStr testerStr
4096个4092
4096 4090
4096个4094
4096个4095

如果正在读取4096个字节,为什么bufferStrtesterStr的长度小于该值,即使不在文件末尾也是如此?

参考:This表示read()返回读入缓冲区的字节总数。

最佳答案

因为有些字符需要多个字节。缓冲区Str.length()为您提供字符数,而不是字节数。

10-02 03:57