是不是我的代码有问题?
long blockSize = (long) 2 << 10;
long totalSize = 4L << 30;
long totalCount = totalSize / blockSize;
SeekableByteChannel outputStream = Files.newByteChannel(Paths.get("D:\\test"), StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.DELETE_ON_CLOSE);
ByteBuffer data = ByteBuffer.allocate((int) blockSize);
Random random = new Random(System.currentTimeMillis());
long startTime = System.currentTimeMillis();
for (long i = 0; i < totalCount; i++) {
outputStream.position(Math.abs(random.nextInt()));
outputStream.write(data);
}
outputStream.close();
long stopTime = System.currentTimeMillis();
System.out.println(totalSize * 1000.0 / (stopTime - startTime) / (1 << 20));
long blockSize = (long) 2 << 10;
long totalSize = 4L << 30;
long totalCount = totalSize / blockSize;
SeekableByteChannel outputStream = Files.newByteChannel(Paths.get("D:\\test"), StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.DELETE_ON_CLOSE);
ByteBuffer data = ByteBuffer.allocate((int) blockSize);
Random random = new Random(System.currentTimeMillis());
long startTime = System.currentTimeMillis();
for (long i = 0; i < totalCount; i++) {
outputStream.position(Math.abs(random.nextInt()));
outputStream.write(data);
}
outputStream.close();
long stopTime = System.currentTimeMillis();
System.out.println(totalSize * 1000.0 / (stopTime - startTime) / (1 << 20));
“发现上!”???
你把StandardOpenOption.DELETE_ON_CLOSE注释掉,把文件写到硬盘上,可以看出文件的大小不是4G
“发现上!”???
你把StandardOpenOption.DELETE_ON_CLOSE注释掉,把文件写到硬盘上,可以看出文件的大小不是4G是位置随机的写,会覆盖之前写过的内容,所以文件大小不可能是4G。要测试的不是顺序写,是随机写。
“发现上!”???
你把StandardOpenOption.DELETE_ON_CLOSE注释掉,把文件写到硬盘上,可以看出文件的大小不是4G是位置随机的写,会覆盖之前写过的内容,所以文件大小不可能是4G。要测试的不是顺序写,是随机写。
人家4k随机读写是对整个硬盘而言,你这个随机读写只是一个文件,差别大了,测出的数据比硬盘测速软件高很正常,除非你这个文件写满这个硬盘。