我正在开发 Java 上的跨平台非分布式磁盘存储协议。文件将由相当独立的、通常很小 (< 4 KB) 的“数据块”组成。是否可以避免跨 FS 块边界写入块使协议更加健壮,因为 FS 块读取失败将触及更少的块?我可以假设在大多数文件系统中,文件数据的开头是块对齐的吗?
假设我知道,目标分区上的块大小为 4 KB。
SeekableByteChannel ch = Files.newByteChannel(file, CREATE, WRITE);
ch.write(buffer);
long pos = ch.position();
long alignment = 4096;
if (pos % alignment != 0)
ch.position(((pos / alignment) + 1) * alignment);
ch.write(buffer2); // will buffer2 data be really FS block-aligned?