java - 问一个比较基础的问题,为什么0x8FFFFFF 等于 128 MB ?
阿神
阿神 2017-04-17 17:35:27
0
6
918

怎么换算的啊?进制数之间可以转换,为什么两个不同计量单位之间也可以转换啊?
代码如下:

import java.nio.*;
import java.nio.channels.*;
import java.io.*;
import static net.mindview.util.Print.*;

public class LargeMappedFiles {
  static int length = 0x8FFFFFF; // 128 MB
  public static void main(String[] args) throws Exception {
    MappedByteBuffer out =
      new RandomAccessFile("test.dat", "rw").getChannel()
      .map(FileChannel.MapMode.READ_WRITE, 0, length);
    for(int i = 0; i < length; i++)
      out.put((byte)'x');
    print("Finished writing");
    for(int i = length/2; i < length/2 + 6; i++)
      printnb((char)out.get(i));
  }
}
阿神
阿神

闭关修行中......

全部回覆(6)
洪涛

應該是一個筆誤吧,你用計算機可以算下 128MB是0x8000000,或者你自己測下,產生的test.data就是143MB的

RandomAccessFile randomAccessFile = new RandomAccessFile("test.data", "rw");
FileChannel channel = randomAccessFile.getChannel();
ByteBuffer buffer = channel.map(FileChannel.MapMode.READ_WRITE, 0, 0x8FFFFFF);
Ty80

轉化為二進制。 。數0去

大家讲道理

就算0x8FFFFFF的單位是B,換算後是144MB左右啊,0x8000000 B才等於128MB

洪涛

應該是程式碼跟註解不同步吧。例如本來是0x8000000,也就是128MB,後來因為某些原因改成0x8FFFFFFF了,但忘了改註解。或者乾脆就是筆誤。感覺這是一個典型的「無用」註解。

迷茫

0x8FFFFFF只是一個數,沒有單位,怎麼會等於128M呢

左手右手慢动作

這好像是一個關於補碼、反碼、源碼之間轉換的問題吧。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板