ken*_*dds 13 java optimization file-io operating-system system
我正在尝试编写最快,最优的文件保存方法.有没有办法在java中获取系统块大小?喜欢System.getProperty("block.size")什么东西.
"最快的最佳方式"肯定是使用你能承受的最大缓冲区写的; 确保它的大小是2的幂(想到一兆字节); 并确保写入本身是缓冲区对齐的:
new BufferedOutputStream(new FileOutputStream(file), 1024*1024);
Run Code Online (Sandbox Code Playgroud)
只要你超过系统块大小,你就会达到这个大小,并且保持与它对齐,这是由它保证的BufferedOutputStream,这几乎是最佳的.
您还应该查看FileChannel.transferTo(),注意您必须在循环中调用它,并且到目前为止实际的实现似乎没有使用任何低级操作系统原语(与广告相反),只是同样的循环你可以自己写
从 Java 9 开始,您可以使用 FileSystem 和 FileStore 类根据本机操作系统实现的文件系统获取系统磁盘块大小。代码如下:
FileSystem fs = FileSystems.getDefault();
Iterable<Path> roots = fs.getRootDirectories();
for (FileStore store: fs.getFileStores()) {
Iterator<Path> i = roots.iterator();
while(i.hasNext()) {
if(store.name().startsWith(i.next().toString())) {
System.out.println("Name: " + store.name() + ", Read only: " + store.isReadOnly() + ", Type: " + store.type() + ", Block: " + store.getBlockSize() + " Bytes");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5436 次 |
| 最近记录: |